ROM*_*eer 6 java jax-rs jersey query-parameters
是否可以在Jersey中为单个对象/变量允许多个 @QueryParam键?
实际:
@POST
public Something getThings(@QueryParam("customer-number") Integer n) {
...
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我?customer-number=3在URL后添加它的工作原理.
预期:
如果我添加以下任何值,我想得到上面的行为:
?customer-number=3?customerNumber=3?customerNo=3OBS:
该QueryParam注释是这样的:
...
public @interface QueryParam {
String value();
}
Run Code Online (Sandbox Code Playgroud)
所以,它不能接受多个String值(比如@Produces).
下面的方法允许用户同时使用具有相同含义的多个键(并且我希望它们之间具有"OR"条件):
@POST
public Something getThings(@QueryParam("customer-number") Integer n1,
@QueryParam("customerNumber") Integer n2,
@QueryParam("customerNo") Integer n3) {
...
}
Run Code Online (Sandbox Code Playgroud)这样的东西不起作用:
@POST
public Something getThings(@QueryParam("customer-number|customerNumber|customerNo") Integer n) {
...
}
Run Code Online (Sandbox Code Playgroud)我怎样才能做到这一点?
细节:
也许最简单和最简单的方法是使用自定义@BeanParam:
首先将合并所有查询参数的自定义 bean 定义为:
class MergedIntegerValue {
private final Integer value;
public MergedIntegerValue(
@QueryParam("n1") Integer n1,
@QueryParam("n2") Integer n2,
@QueryParam("n3") Integer n3) {
this.value = n1 != null ? n1
: n2 != null ? n2
: n3 != null ? n3
: null;
// Throw an exception if value == null ?
}
public Integer getValue() {
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后@BeanParam在您的资源方法中使用它:
public Something getThings(
@BeanParam MergedIntegerValue n) {
// Use n.getValue() ...
}
Run Code Online (Sandbox Code Playgroud)
参考:https://jersey.java.net/documentation/latest/user-guide.html#d0e2403