【发布时间】:2011-04-19 15:09:55
【问题描述】:
我正在构建一个通用 Web 服务,需要将所有查询参数抓取到一个字符串中以供以后解析。我该怎么做?
【问题讨论】:
我正在构建一个通用 Web 服务,需要将所有查询参数抓取到一个字符串中以供以后解析。我该怎么做?
【问题讨论】:
您可以通过@QueryParam("name") 访问单个参数或通过上下文访问所有参数:
@POST
public Response postSomething(@QueryParam("name") String name, @Context UriInfo uriInfo, String content) {
MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
String nameParam = queryParams.getFirst("name");
}
密钥是@Contextjax-rs annotation,可以用来访问:
UriInfo、请求、HttpHeaders、 安全上下文,提供者
【讨论】:
请求URI中未解析的查询部分可以从UriInfo对象中获取:
@GET
public Representation get(@Context UriInfo uriInfo) {
String query = uriInfo.getRequestUri().getQuery();
...
}
【讨论】:
为已接受的答案添加更多内容。也可以通过以下方式获取所有查询参数,而无需向方法添加额外的参数,这在维护 swagger 文档时可能很有用。
@Context
private UriInfo uriInfo;
@POST
public Response postSomething(@QueryParam("name") String name) {
MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
String nameParam = queryParams.getFirst("name");
}
【讨论】:
我们可以使用查询参数将值客户端发送到服务器
http://localhost:8080/JerseyDemo/rest/user/12?p=10
这里 p 是查询参数值。我们可以使用@QueryParam("p") 注解来获取这个值
public adduser(@QueryParam("p") int page){
//some code
}
有时我们会在查询参数中发送值列表,例如
http://localhost:8080/JerseyDemo/rest/user/12?city=delhi&country=india&city=california
在这种情况下,我们可以使用@Context UriInfo 检索所有查询参数
public String addUser( @Context UriInfo uriInfo){
List<String> cityList = uriInfo.getQueryParameters().get("city");
}
您可以查看包含更多详细信息的完整示例 - QueryParam Annotation In Jersey 在这里您将看到更多其他在球衣中检索查询参数的方法。
【讨论】: