1. 程式人生 > 程式設計 >簡單捋捋@RequestParam 和 @RequestBody的使用

簡單捋捋@RequestParam 和 @RequestBody的使用

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

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

無意間該去看看這兩個是有什麼不同了.

  • @RequestParam
  • @RequestBody (以 json 資料的形式接收)

如果不寫 @RequestParam(xxx) 註解的話,那麼就前端可以有 可以沒有對應的xxx名字都行

如果有xxx名,那麼就會自動匹配;

如果沒有,請求也能正確傳送。

一、 @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 引數名的引數就會報錯

1. 用 @RequestParam 前端傳過來的引數名預設為 userName 我們String後面起的引數名

如果前端不傳 user 或者 psd 引數名的引數就會報錯

2. 用 @RequestParam("user") @RequestParam("psd"), 給前端傳遞過來的引數指定引數名

錯誤資訊

3. "message":"Required String parameter 'userName' is not present"

其實還有其他的形式

看下面

@RequestParam(value="user" required=false) 這個註解

可以通過 required = false 或者 true 來要求 @RequestParam配置的前端引數是否一定要傳

required = false 表示不傳的話,會給引數賦值為 null ,required = true 就是必須要有

注意:

如果@requestParam註解的引數是int型別,並且required=false,此時如果不傳引數的話,會報錯。原因是,required=false時,不傳引數的話,會給引數賦值null,這樣就會把null賦值給了int,因此會報錯。

使用 Integer 包裝型別的話還要需要注意空指標異常

二、@RequestBody

@RequestBody 以 字串 的形式接收前端傳過來的請求體中的 json 資料

  @RequestMapping(value = "login",method = RequestMethod.POST)
  public String login(@RequestBody String jsonStr){

@RequestBody 以 簡單物件 接收前端傳過來的 json 資料

  @RequestMapping(value = "login",method = RequestMethod.POST)
  public String login(@RequestBody User user){

@RequestBody以 複雜物件 接收前端傳過來的 json 資料

  @RequestMapping(value = "login",method = RequestMethod.POST)
  public String login(@RequestBody Team team){

參考: 筆者JustryDeng

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。