传递自定义类型查询参数
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
注释)
- 成为原始类型
- 有一个接受单个字符串参数的构造函数
- 有一个名为
valueOf
或 fromString
的静态方法,它接受一个字符串参数(例如,参见 Integer.valueOf(String)
)
- 有一个 ParamConverterProvider JAX-RS extension SPI that returns a ParamConverter 实例的注册实现,能够对类型进行 "from string" 转换。
- 为
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
的一个很好的例子
如何接受自定义类型查询参数?
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
注释)
- 成为原始类型
- 有一个接受单个字符串参数的构造函数
- 有一个名为
valueOf
或fromString
的静态方法,它接受一个字符串参数(例如,参见Integer.valueOf(String)
) - 有一个 ParamConverterProvider JAX-RS extension SPI that returns a ParamConverter 实例的注册实现,能够对类型进行 "from string" 转换。
- 为
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