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

时间:2011-04-19 15:09:55

标签: java jersey jax-rs

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

4 个答案:

答案 0 :(得分:151)

您可以通过上下文通过@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 annotation,可用于访问:

  

UriInfo,Request,HttpHeaders,   SecurityContext,Providers

答案 1 :(得分:32)

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

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

答案 2 :(得分:1)

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

@Context
private UriInfo uriInfo;

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

ref

答案 3 :(得分:0)

我们可以使用查询参数将值客户端发送到服务器

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 在这里,您将看到更多在 jersey 中检索查询参数的其他方法。