有没有一种方法可以获取整个查询字符串而不进行解析?如:
http://localhost:8080/spring-rest/ex/bars?id=100,150&name=abc,efg
我想得到一切吗?作为一个字符串。是的,我稍后会对其进行解析,但这使我的 Controller 和所有后续代码更加通用。
到目前为止,我已经尝试使用@ PathParam,@ RequestParam以及@Context UriInfo,结果如下。但是我似乎无法理解整个字符串。这就是我要的:
id=100,150&name=abc,efg
使用curl @PathParam使用
产生id = 100,150
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/spring-rest/ex/qstring/{qString}")
public String getStuffAsParam ( @PathParam("qstring") String qString) {
...
}
@RequestParam使用
给出无法识别的名称。
产生异常。
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/spring-rest/ex/qstring")
public String getStuffAsMapping (@RequestParam (value ="qstring", required = false) String[] qString) {
...
}
编辑-下面的方法是我希望重点关注的方法。
这几乎可以工作。它没有在MultivaluedMap中提供完整的查询字符串。它只是给我第一个字符串,直到&。我尝试使用其他字符作为分隔符,但仍然无法正常工作。我需要使该字符串处于未解码状态。
@Context与UriInfo使用
给出queryParams id = [100,150]的值。再次,name =部分被截断了。
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/spring-rest/ex/qstring")
public String getStuffAsMapping (@Context UriInfo query) {
MultivaluedMap<String, String> queryParams = query.getQueryParameters();
...
}
我在想查询字符串被解码,这并不是我真正想要的。如何获得整个字符串?
任何帮助是极大的赞赏。
最佳答案
您应该查看支持的参数列表:
https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-methods
您可以添加一个HttpServletRequest
参数并调用 getQueryString()
:
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/spring-rest/ex/qstring")
public String getStuffAsMapping(HttpServletRequest request) {
String query = request.getQueryString();
...
}
另一种方法是使用
@Context UriInfo
,然后调用 UriInfo.getRequestUri()
和 URI.getQuery()
:@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/spring-rest/ex/qstring")
public String getStuffAsMapping(@Context UriInfo uriInfo) {
String query = uriInfo.getRequestUri().getQuery();
...
}
关于java - 从REST GET服务调用获取整个查询字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35927332/