我在对象中使用UriInfo
,我对请求内的params进行了验证,我做了以下操作,但是我仍然得到空值,searchCount
值为null但是我设置{{1如下所示:
DefaultValue
答案 0 :(得分:0)
它不起作用,Java如何知道该方法与查询字符串有什么关系?这是一个例子:
public void foo(@DefaultValue("50") @QueryParam("count") int count){}
答案 1 :(得分:0)
您似乎在滥用@DefaultValue
注释。请参阅javadoc:
定义使用以下注释之一绑定的请求元数据的默认值:
PathParam
,QueryParam
,MatrixParam
,CookieParam
,FormParam
,或HeaderParam
。如果请求中不存在相应的元数据,则使用默认值。
如果知道您希望收到的参数,则无需使用UriInfo
。
您可以对方法参数使用@QueryParam
注释来映射查询参数,然后使用@DefaultValue
注释来定义此类参数的默认值:
@Path("foo")
public class MyResource {
@GET
public String searchCount(@QueryParam("lon") String longitude,
@QueryParam("lat") String latitute,
@QueryParam("range") @DefaultValue("10000") String range,
@QueryParam("eType") String eventType,
@QueryParam("pType") String placeType,
@QueryParam("count") @DefaultValue("50") String count) {
...
}
}
或者,您可以在资源方法字段中使用@QueryParam
:
@Path("foo")
public class MyResource {
@QueryParam("lon")
private String longitude;
@QueryParam("lat")
private String latitute;
@QueryParam("range")
@DefaultValue("10000")
private String range;
@QueryParam("eType")
private String eventType;
@QueryParam("pType")
private String placeType;
@QueryParam("count")
@DefaultValue("50")
private String count;
@GET
public String searchCount() {
...
}
}
如果要在多个资源类中重用查询参数,可以在bean中聚合它们,并使用这样的bean作为用@BeanParam
注释的方法参数:
public class SearchParams {
@QueryParam("lon")
private String longitude;
@QueryParam("lat")
private String latitute;
@QueryParam("range")
@DefaultValue("10000")
private String range;
@QueryParam("eType")
private String eventType;
@QueryParam("pType")
private String placeType;
@QueryParam("count")
@DefaultValue("50")
private String count;
// Getters and setters
}
@Path("foo")
public class MyResource {
@GET
public String searchCount(@BeanParam SearchParams searchParams) {
...
}
}
@Size
注释可以与上述方法一起使用。