![](/img/trans.png)
[英]Spring Boot - How to get all request params in a map in Spring RestController?
[英]Spring MVC - How to get all request params in a map in Spring controller?
示例網址:
../search/?attr1=value1&attr2=value2&attr4=value4
我不知道 attr1、att2 和 attr4 的名稱。
我希望能夠做類似的事情(或類似的,不在乎,只要我可以訪問請求參數名稱的 Map -> value:
@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request,
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}
如何使用 Spring MVC 實現這一點?
編輯
有人指出存在( 至少從 3.0 開始)一種純 Spring MVC 機制,通過它可以獲取這些數據。 這里就不詳述了,因為是其他用戶的回答。 有關詳細信息,請參閱@AdamGent 的回答,不要忘記點贊。
在 Spring 3.2 文檔中, RequestMapping
JavaDoc 頁面和RequestParam
JavaDoc 頁面都提到了這種機制,但之前,它只在RequestMapping
頁面中提到。 在 2.5 文檔中沒有提到這種機制。
這可能是大多數開發人員的首選方法,因為它刪除(至少是這個)與 servlet-api jar 定義的HttpServletRequest
對象的綁定。
/編輯
您應該可以通過request.getQueryString()
訪問請求查詢字符串。
除了 getQueryString 之外,查詢參數也可以從request.getParameterMap()作為 Map 檢索。
HttpServletRequest 對象已經提供了一個參數映射。 有關更多詳細信息,請參閱request.getParameterMap() 。
這是在Map
中獲取requestParams
的簡單示例:
@RequestMapping(value="submitForm.html", method=RequestMethod.POST)
public ModelAndView submitForm(@RequestParam Map<String, String> reqParam) {
String name = reqParam.get("studentName");
String email = reqParam.get("studentEmail");
ModelAndView model = new ModelAndView("AdmissionSuccess");
model.addObject("msg", "Details submitted by you::Name: " + name
+ ", Email: " + email );
}
在這種情況下,它將綁定值:
studentName
name
與name
email
studentEmail
email
你可以簡單地使用這個:
Map<String, String[]> parameters = request.getParameterMap();
那應該可以正常工作
有兩個接口
org.springframework.web.context.request.WebRequest
org.springframework.web.context.request.NativeWebRequest
允許通用請求參數訪問以及request/session
屬性訪問,與本機 Servlet/Portlet API 無關。
前任。:
@RequestMapping(value = "/", method = GET)
public List<T> getAll(WebRequest webRequest){
Map<String, String[]> params = webRequest.getParameterMap();
//...
}
PS 有關於可用作控制器參數的參數的文檔。
在你的控制器方法中使用org.springframework.web.context.request.WebRequest
作為參數,它提供了getParameterMap()
方法,優點是你的應用程序不會被 Servlet API 束縛,WebRequest 是 JavaEE 的一個例子模式上下文對象。
我可能會遲到,但根據我的理解,您正在尋找這樣的東西:
for(String params : Collections.list(httpServletRequest.getParameterNames())) {
// Whatever you want to do with your map
// Key : params
// Value : httpServletRequest.getParameter(params)
}
@SuppressWarnings("unchecked")
Map<String,String[]> requestMapper=request.getParameterMap();
JsonObject jsonObject=new JsonObject();
for(String key:requestMapper.keySet()){
jsonObject.addProperty(key, requestMapper.get(key)[0]);
}
所有參數都將存儲在jsonObject
。
查詢參數和路徑參數之間存在根本區別。 它是這樣的: www.your_domain?queryparam1=1&queryparam2=2
- 查詢參數。 www.your_domain/path_param1/entity/path_param2
- 路徑參數。
我發現令人驚訝的是,在 Spring MVC 世界中,很多人將兩者混為一談。 雖然查詢參數更像是搜索條件,但路徑參數很可能唯一標識資源。 話雖如此,這並不意味着您的 URI 中不能有多個路徑參數,因為資源結構可以嵌套。 例如,假設您需要特定人員的特定汽車資源:
www.my_site/customer/15/car/2
- 尋找第 15 位客戶的第二輛車。
將所有路徑參數放入地圖的用例是什么? 當您查看 URI 本身時,路徑參數沒有“鍵”,映射中的那些鍵將從您的 @Mapping 注釋中獲取,例如:
@GetMapping("/booking/{param1}/{param2}")
從 HTTP/REST 的角度來看,路徑參數無法真正投影到地圖上。 在我看來,這完全是關於 Spring 的靈活性和他們希望容納任何開發人員的心血來潮。
我永遠不會將映射用於路徑參數,但它對於查詢參數非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.