簡單捋捋@RequestParam 和 @RequestBody

前端向後端傳遞參數,後端怎麼去接收,就會想到 spring 的註解前端

以前的話,我一直用的是 RequestParam("userName") String userName 這種形式,講道理不怎麼用 RequestParam String userNamejava

無心間該去看看這兩個是有什麼不一樣了.spring

  1. @RequestParam
  2. @RequestBody (以 json 數據的形式接收)


若是不寫 @RequestParam(xxx) 註解的話,那麼就前端能夠有 能夠沒有對應的xxx名字都行
 若是有xxx名,那麼就會自動匹配;
 若是沒有,請求也能正確發送。


1、 @RequestParam


/**
     * 用戶登陸
     * @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 包裝類型的話還要須要注意空指針異常


2、@RequestBody


  1. @RequestBody 以 字符串 的形式接收前端傳過來的請求體中的 json 數據
@RequestMapping(value = "login", method = RequestMethod.POST)
    public String login(@RequestBody String jsonStr){



  1. @RequestBody 以 簡單對象 接收前端傳過來的 json 數據
@RequestMapping(value = "login", method = RequestMethod.POST)
    public String login(@RequestBody User user){



  1. @RequestBody以 複雜對象 接收前端傳過來的 json 數據
@RequestMapping(value = "login", method = RequestMethod.POST)
    public String login(@RequestBody Team team){









參考: 筆者JustryDeng

相關文章
相關標籤/搜索