传递自定义类型查询参数

时间:2015-05-22 17:55:44

标签: java rest jersey jax-rs dropwizard

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

public String detail(@QueryParam("request") final MYRequest request) {

以上行在启动服务器时出错

jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.

1 个答案:

答案 0 :(得分: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。生成的集合是只读的。
  6. 这些要求的原因是该值以字符串形式出现。运行时需要知道如何将字符串转换为要注入的类型。异常的原因是启动时有初始资源模型验证。此验证检查以确保所有注射点都有效。它看到注入的类型MyRequest不符合上述任何要求,并引发异常。

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

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

    您可以看到使用ParamConverter here

    的好例子