当前位置: 首页 > 知识库问答 >
问题:

无法在JERSEY RS中的ParamConverter中运行自定义java类型

栾景胜
2023-03-14
  <dependencies>
  <dependency>
   <groupId>org.glassfish.jersey.bundles</groupId>
    <artifactId>jaxrs-ri</artifactId>
    <version>2.0</version>
    <!--   <scope>provided</scope> -->
</dependency>

  <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>2.16</version>
    <scope>provided</scope>
</dependency>

<dependency>
   <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.16</version>
</dependency>

   </dependencies>
@Provider
public class MyParamConverterProvider implements ParamConverterProvider{
    @Override
    public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation[] annotations) {
        if(rawType.equals(DateResource.class)){
           // return (ParamConverter<T>) new MyDate();
            return (ParamConverter<T>) new DateResource();
            //return (ParamConverter<T>) new ParamConverter<DateResource>();
        }
        return null;
    }

    }
public class DateResource implements ParamConverter<MyDate> {
@Override
    public MyDate fromString(String value) {
        // TODO Auto-generated method stub
         if (value == null || value.trim().isEmpty()) {
                return null;
            }

         MyDate dateParamModel = new MyDate();
        dateParamModel.setDateAsString(value);
        return  dateParamModel;

    }

    @Override
    public String toString(MyDate mo) {


            return ((MyDate) mo).getDateAsString();
    }

}
public class MyDate {


    private String dateAsString;

    public String getDateAsString() {
        return dateAsString;
    }

    public void setDateAsString(String dateAsString) {
        this.dateAsString = dateAsString;
    }

    public LocalDateTime getDate() {
        LocalDateTime dateTime = null;
        try {
            dateTime = LocalDateTime.parse(dateAsString, DateTimeFormatter.ISO_DATE_TIME);
        } catch (DateTimeParseException ex) {
            System.err.println("Conversion of dateAsString: " + dateAsString + " using ISO date time failed.");
        }
        try {
            dateTime = LocalDateTime.parse(dateAsString, DateTimeFormatter.ISO_DATE);
        } catch (DateTimeParseException ex) {
            System.err.println("Conversion of dateAsString: " + dateAsString + " using ISO date failed.");
        }

        return dateTime;
    }
}
@Path("date/{dateString}")
public class MyCustomdate {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    //public String getRequestedDate(@PathParam("dateString") String dateString)
    public String getRequestedDate(@PathParam("dateString") MyDate myDate)
    {
        return "Got"+ myDate.getDate() ;
    }

}

我的主要班级

@ApplicationPath("webapi")
public class MyRestApiApp extends Application {

}

请就这个问题进行指导。

共有1个答案

后源
2023-03-14
if(rawType.equals(DateResource.class)){

这是不对的。您需要检查参数类型。在验证资源参数时,Jersey要做的是检查所有paramconverterprovider,看看它们是否都返回该参数类型的null以外的其他内容。由于您检查的是转换器类型而不是参数类型,因此在检查mydate参数期间,它返回null。这时就会发生ModelValidationExeption

只需更改它以检查要转换的参数类型。

if(rawType.equals(MyDate.class)){

还要从依赖项中删除jaxrs-ri。你不需要它。

 类似资料:
  • 我试图在PySpark中运行一个自定义的HDFS阅读器类。这个类是用Java编写的,我需要从PySpark访问它,可以从shell访问,也可以使用spark-submit访问。 有人能帮忙吗?谢了。

  • 我正在尝试运行一个Java类作为gradle任务。 我已将此添加到我的: 但是,当我在命令行上运行时,它会失败并出现以下错误: 因此,我在我的任务中添加了一个类路径,如问题中所述: 然而,这是一个大型的遗留项目,具有非常长的类路径,所以当我运行< code > gradle download keystore 时,我得到了另一个错误: 所以我在中修改了我的,现在看起来像这样: 这适用于命令行,但是

  • 我有一门狗和猫的课,看起来像这样: 这些类都实现了我创建的一个名为Speakable的接口,它看起来像这样: 这个Speakable接口之所以存在,是因为我需要一个引用变量,允许我将狗和猫添加到同一个ArrayList中,并且仍然在它们上调用说话()方法。 我还需要重写Comparable接口的compareTo()方法,以便比较狗的名字。调用此方法时,我认为我的代码如下所示:a.compareT

  • 在中定义额外的方法(不重写超类方法)时,代码编译良好,没有任何问题,但如果我试图调用额外的方法,它会抛出错误。那么,在使用扩展时,是否只有在子类中的方法才可能?如果是这样,谁能解释一下为什么? 下面是我的代码的样子 这就是我得到的错误

  • 请让我知道,如果这是不是正确的地方发布,但我一直在寻找有关这方面的信息,似乎找不到一个简洁的答案。 我一直在尝试使用KeyClope来满足我们应用程序的用户管理需求。虽然我发现KeyClope非常有能力,也非常有效,但我已经进入了我们使用的死胡同。 背景: 传统上,我们的应用程序使用一个非常基本的登录框架来验证身份验证。然后使用我们无法更改的第三方应用程序,确定用户将通过wsdl操作拥有的角色,并

  • 问题内容: 例: 我发现上面的代码在Java中是完全合法的。我有以下问题。 在方法内部拥有类定义的用途是什么? 是否会为生成一个类文件 我很难以面向对象的方式来想象这个概念。在行为中具有类定义。也许有人可以用等效的真实例子告诉我。 方法中的抽象类对我来说听起来有点疯狂。但不允许使用任何接口。这背后有什么原因吗? 问题答案: 这称为本地课程。 2很简单:是的,将生成一个类文件。 1和3是同一个问题。