传递自定义类型查询参数

Passing custom type query parameter

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

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

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

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

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

  1. 成为原始类型
  2. 有一个接受单个字符串参数的构造函数
  3. 有一个名为 valueOffromString 的静态方法,它接受一个字符串参数(例如,参见 Integer.valueOf(String)
  4. 有一个 ParamConverterProvider JAX-RS extension SPI that returns a 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;
    }
}

您可以看到使用 ParamConverter here

的一个很好的例子