传递自定义类型查询参数

Him*_*dav 5 java rest jax-rs jersey dropwizard

如何接受自定义类型查询参数?

public String detail(@QueryParam("request") final MYRequest request) {
Run Code Online (Sandbox Code Playgroud)

上面的行在启动服务器时出错

jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
Run Code Online (Sandbox Code Playgroud)

Pau*_*tha 12

@QueryParam关于可接受的注入类型,请查看文档.(这同样适用于所有其他@XxxParam注释)

  1. 是一种原始类型
  2. 有一个接受单个String参数的构造函数
  3. 有一个名为valueOffromString接受单个String参数的静态方法(例如,参见Integer.valueOf(String))
  4. 有一个ParamConverterProvider JAX-RS扩展SPI 的注册实现,它返回一个ParamConverter实例,该实例能够为该类型进行"from string"转换.
  5. List<T>,Set<T>或者SortedSet<T>,T满足2,3或4以上.生成的集合是只读的.

这些要求的原因是该值以字符串形式出现.运行时需要知道如何将字符串转换为要注入的类型.异常的原因是启动时有初始资源模型验证.此验证检查以确保所有注射点都有效.它看到注入的类型MyRequest不符合上述任何要求,并抛出异常.

基本上你有第2点和第3点,你需要自己解析字符串

public class MyRequest {
    public static MyRequest fromString(string param) {
        // 1. Parse string
        // 2. Create MyRequest request;
        return request;
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到一个很好的例子ParamConverter