後端如何獲取前端傳的參數
傳統來講,肯定是兩種方式爲主,一種是 GET ,一種是 POST ,這兩種方式都是向一個 URL 傳參 GET 方式體現到了地址欄裏,POST 方式將內容放在了 body 裏
@RequestParam
和 @PathVariable
註解是用於從 request 中接收請求的,兩個都可以接收參數,關鍵點不同的是@RequestParam
是從 request 裏面拿取值,而 @PathVariable
是從一個URI模板裏面來填充
@PathVariable
通過 URI 模板來填充
舉例:
@RequestMapping(value = "/getbyid/{id}", method = RequestMethod.GET)
@ResponseBody
private Map<String, Object> getbyid( HttpServletRequest request,@PathVariable("id") int idnum){
Map<String, Object> modelMap = new HashMap<String, Object>();
modelMap.put("idnum", idnum);
return modelMap;
}
當我們訪問:
http://localhost:8080/upmovie/movie/getbyid/19

我們可以直接獲取地址裏的19
@PathParam
獲取 request 裏的值
@RequestMapping(value = "/getbyid", method = RequestMethod.GET)
@ResponseBody
private Map<String, Object> getbyid( HttpServletRequest request,@RequestParam(value="id", required=true)int idnum){
Map<String, Object> modelMap = new HashMap<String, Object>();
modelMap.put("idnum", idnum);
return modelMap;
}
當我們訪問:
http://localhost:8080/upmovie/movie/getbyid?id=21

我們只能獲取 ?id 的值,如果是 POST 方式,我們也可以獲取指定值
優缺點
直接獲取 URI 模板裏的值是很方便的,不用去獲取 request 裏的固定參數,比較直接,藏在 request 裏的使用 POST 方式會優雅一點,如果只是 ID 這種單個或者多個數字字母,使用 @PathVariable 會好很多,這裏借鑑的是 thinkphp5 裏的優點加以利用。
總結
我認爲在單個參數提交 API 獲取信息的時候,直接放在 URL 地址裏,也就是使用 URI 模板的方式是非常方便的,而不使用 @PathVariable 還需要從 request 裏提取指定參數,多一步操作,所以如果提取的是多個參數,而且是多個不同類型的參數,我覺得應該使用其他方式。