我正在构建一个通用的Web服务,需要将所有查询参数都抓取到一个字符串中以便以后解析。我怎么能这样做?
答案 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");
}
答案 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 中检索查询参数的其他方法。