带有DefaultValue的JAXRS UriInfo

时间:2018-01-12 09:57:30

标签: java jax-rs

我在对象中使用UriInfo,我对请求内的params进行了验证,我做了以下操作,但是我仍然得到空值,searchCount值为null但是我设置{{1如下所示:

DefaultValue

2 个答案:

答案 0 :(得分:0)

它不起作用,Java如何知道该方法与查询字符串有什么关系?这是一个例子:

public void foo(@DefaultValue("50") @QueryParam("count") int count){}

答案 1 :(得分:0)

您似乎在滥用@DefaultValue注释。请参阅javadoc

中的以下引用
  

定义使用以下注释之一绑定的请求元数据的默认值:PathParamQueryParamMatrixParamCookieParamFormParam,或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注释可以与上述方法一起使用。