有没有一种方法可以获取整个查询字符串而不进行解析?如:

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/

10-09 07:04
查看更多