如何获取Jersey JaxRS中的所有查询参数?


91

我正在构建一个通用的Web服务,需要将所有查询参数都放入一个字符串中,以便以后进行解析。我怎样才能做到这一点?

Answers:


163

您可以@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");
}

关键是@Context jax-rs批注,可用于访问:

UriInfo,请求,HttpHeaders,SecurityContext,提供程序


我们可以使用GET吗?
感觉不错,正在编程

33

可以从UriInfo对象获取请求URI的未解析查询部分:

@GET
public Representation get(@Context UriInfo uriInfo) {
  String query = uriInfo.getRequestUri().getQuery();
  ...
}

4

在接受的答案中添加更多内容。也可以通过以下方式获取所有查询参数,而无需向该方法添加其他参数,这在维护草率文档时可能很有用。

@Context
private UriInfo uriInfo;

@POST
public Response postSomething(@QueryParam("name") String name) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

参考


虽然这有效,但我不推荐它。如果可以保持代码功能纯净,则应该尝试一下-这是更好的方法。
martyglaubitz

1
尽管严格正确,但我将此方法与超类一起使用以自动记录参数,并且效果很好。比每次请求都传递参数要干净得多。有时功能纯净只需要换个方向看几秒钟,而实用的编程即可控制键盘:)
Paul Russell
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.