gpt4 book ai didi

java - 从 REST GET 服务调用中获取整个查询字符串

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:48 24 4
gpt4 key购买 nike

有没有办法在不解析的情况下获取整个查询字符串?如:

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 使用

http://localhost:8080/spring-rest/ex/bars/id=100,150&name=abc,efg

产生 id=100,150

  @GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/spring-rest/ex/qstring/{qString}")
public String getStuffAsParam ( @PathParam("qstring") String qString) {
...
}

@RequestParam 使用

http://localhost:8080/spring-rest/ex/bars?id=100,150&name=abc,efg

给出的名字无法识别。

http://localhost:8080/spring-rest/ex/bars?id=100,150;name=abc,efg

产生异常。

  @GET
@Produces(MediaType.TEXT_PLAIN)
@Path("/spring-rest/ex/qstring")
public String getStuffAsMapping (@RequestParam (value ="qstring", required = false) String[] qString) {
...
}

编辑 - 下面的方法是我想关注的。

这样就差不多了。它没有给我 MultivaluedMap 中的完整查询字符串。它只给我第一个字符串到 &。我试过使用其他字符作为分隔符,但仍然不起作用。我需要让这个字符串处于未解码状态。

@Context 和 UriInfo 使用

http://localhost:8080/spring-rest/ex/bars?id=100,150&name=abc,efg

为 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com