簡體   English   中英

從REST GET服務調用獲取整個查詢字符串

[英]Getting whole query string from REST GET service call

有沒有辦法獲得整個查詢字符串而不解析它? 如:

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

我希望得到一切關注? 作為一個字符串。 是的我稍后會解析它,但這允許我的控制器和所有后續代碼更通用。

到目前為止,我已嘗試使用@PathParam,@ RequestParam以及@Context UriInfo,結果如下。 但我似乎無法得到整個字符串。 這就是我要的:

id=100,150&name=abc,efg

使用curl @PathParam

HTTP://本地主機:8080 /彈簧休息/ EX /酒吧/ ID = 100,150&名稱= 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://本地主機:8080 /彈簧休息/ EX /條ID = 100,150&名稱= ABC,EFG

名稱未被識別。

HTTP://本地主機:8080 /彈簧休息/ EX /條ID = 100,150;名稱= ABC,EFG

產生例外。

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

編輯 - 下面的方法是我想要關注的內容。

這幾乎起作用。 它沒有在MultivaluedMap中提供完整的查詢字符串。 它只給了我第一個字符串到&。 我已經嘗試使用其他字符作為分隔符,但仍然無法正常工作。 我需要將此字符串置於未解碼狀態。

使用UriInfo的@Context

HTTP://本地主機:8080 /彈簧休息/ EX /條ID = 100,150&名稱= ABC,EFG

給queryParams id = [100,150]賦值。 同樣, name = part被截斷了。

  @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();
    ...
}

我會去

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

並擁有此RequestMapping

@RequestMapping(value="/spring-rest/ex/bars")
public String getStuffAsParam(@RequestParam("id")String id, @RequestParam("name")String name)

如果需要訪問原始查詢,則需要從請求對象獲取它。 請參閱此舊問題以訪問它。 盡管答案未被接受,但這是一個很好的研究回應。

Spring 3 MVC從控制器訪問HttpRequest

一旦您獲得HttpServletRequest的訪問權限,以下代碼段應該提供查詢字符串

httpservletrequest.getQueryString()

我發布這個后,我看到@Andreas發布了類似的答案。 如果解決方案可以幫助您,請接受他

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM