gpt4 book ai didi

java - 带有 DefaultValue 的 JAXRS UriInfo

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:35 25 4
gpt4 key购买 nike

我在对象内部使用UriInfo,我对请求内部的参数进行了验证,我执行了以下操作,但是我仍然得到空值,searchCount值为空,但是我设置了DefaultValue,如下所示:

private final UriInfo uriInfo;
private final String LONGITUDE = "lon";
private final String LATITUDE = "lat";
private final @DefaultValue("10000") String RANGE = "range";
private final @DefaultValue("") String EVENT_TYPE = "eType";
private final @DefaultValue("") String PLACE_TYPE = "pType";
private final String SEARCH_COUNT = "count";

public NearByRequestWrapper(UriInfo uriInfo) {
this.uriInfo = uriInfo;
}

@DefaultValue("50") @Size(min = 10, max = 100)
public String searchCount() {
return uriInfo.getQueryParameters().getFirst(SEARCH_COUNT);
}

最佳答案

看来您滥用了 @DefaultValue注解。请参阅 javadoc 中的以下引用:

Defines the default value of request metadata that is bound using one of the following annotations: PathParam, QueryParam, MatrixParam, CookieParam, FormParam, or HeaderParam. The default value is used if the corresponding metadata is not present in the request.

<小时/>

如果知道您期望收到的参数,则不需要使用 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注解可以与上述方法一起使用。

关于java - 带有 DefaultValue 的 JAXRS UriInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48223687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com