前端向後端傳遞參數,後端怎麼去接收,就會想到 spring
的註解前端
以前的話,我一直用的是 RequestParam("userName") String userName
這種形式,講道理不怎麼用 RequestParam String userName
java
無心間該去看看這兩個是有什麼不一樣了.spring
若是不寫 @RequestParam(xxx) 註解的話,那麼就前端能夠有 能夠沒有對應的xxx名字都行 若是有xxx名,那麼就會自動匹配; 若是沒有,請求也能正確發送。
/** * 用戶登陸 * @param userName * @param password * @return */ @RequestMapping(value = "login", method = RequestMethod.POST) public String login(@RequestParam String userName, @RequestParam String password){ public BaseResponse login(@RequestParam("user") String userName, @RequestParam("psd") String password){
若是前端不傳 userName
或者 password
參數名的參數就會報錯json
1. 用 @RequestParam 前端傳過來的參數名默認爲 userName 咱們String後面起的參數名
若是前端不傳 user
或者 psd
參數名的參數就會報錯segmentfault
2. 用 @RequestParam("user") @RequestParam("psd"), 給前端傳遞過來的參數指定參數名
錯誤信息後端
3. "message":"Required String parameter 'userName' is not present"
其實還有其餘的形式app
看下面ui
@RequestParam(value="user" required=false) 這個註解
能夠經過 required = false
或者 true
來要求 @RequestParam配置的前端參數是否必定要傳 spa
required = false 表示不傳的話,會給參數賦值爲 null ,required = true
就是必需要有 .net
注意:若是@requestParam註解的參數是int類型,而且required=false,此時若是不傳參數的話,會報錯。緣由是,required=false時,不傳參數的話,會給參數賦值null,這樣就會把null賦值給了int,所以會報錯。
使用 Integer 包裝類型的話還要須要注意空指針異常
@RequestMapping(value = "login", method = RequestMethod.POST) public String login(@RequestBody String jsonStr){
@RequestMapping(value = "login", method = RequestMethod.POST) public String login(@RequestBody User user){
@RequestMapping(value = "login", method = RequestMethod.POST) public String login(@RequestBody Team team){
參考: 筆者JustryDeng