[英]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
產生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中提供完整的查詢字符串。 它只給了我第一個字符串到&。 我已經嘗試使用其他字符作為分隔符,但仍然無法正常工作。 我需要將此字符串置於未解碼狀態。
使用UriInfo的@Context
給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)
如果需要訪問原始查詢,則需要從請求對象獲取它。 請參閱此舊問題以訪問它。 盡管答案未被接受,但這是一個很好的研究回應。
一旦您獲得HttpServletRequest的訪問權限,以下代碼段應該提供查詢字符串
httpservletrequest.getQueryString()
我發布這個后,我看到@Andreas發布了類似的答案。 如果解決方案可以幫助您,請接受他
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.