@ResponseBody,@RequestBody和@RequestParam()的使用

本文僅僅是使用層面的解釋

  • @ResponseBody

該註解用於將Controller的方法返回的對象,通過適當的HttpMessageConverter轉換爲指定格式後,寫入到Response對象的body數據區。
使用時機:返回的數據不是html標籤的頁面,而是其他某種格式的數據時(如json、xml等)使用;

簡而言之,就是會將controller返回的對象,換成了key-value型式的數據
例子:

@RequestMapping("/login.do")
    @ResponseBody
    public Object login(String name, String password, HttpSession session) {
        user = userService.checkLogin(name, password);
        session.setAttribute("user", user);
        return new JsonResult(user);
    }
  • @RequestBody和@RequestParam()
    參考文檔
    總結如下:
    這兩個是用來接受數據的註解
    RequestParam內部有4個參數:
  • value請求參數的參數名,作爲參數映射名稱。
  • name同value
  • required該參數是否必填,默認爲true(必填),當設置成必填時,如果沒有傳入參數,報錯。
  • defaultValue 設置請求參數的默認值。
    例子:
package com.lanhuigu.springmvc.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
 
/**
 1. RequestParam註解綁定請求參數
 2. @author yihonglei
 */
@Controller
@RequestMapping("/testRP")
public class RequestParamController {
    private static final String SUCCESS="success";
    /**
     * @RequestParam 映射請求參數
     * value 請求參數的參數名 ,作爲參數映射名稱
     * required 該參數是否必填,默認爲true(必填),當設置成必填時,如果沒有傳入參數,報錯
     * defaultValue 設置請求參數的默認值
     */
    @RequestMapping(value="/testRequestParam")
    public String testRequestParam(
            @RequestParam("username") String username,
            @RequestParam(value="age",required=false,defaultValue="0") int age) {
        System.out.println("testRequestParam,username="+username+",age="+age);
        return SUCCESS;
    }
}

@RequestBody基礎知識介紹

  1. @RequestBody主要用來接收前端傳遞給後端的json字符串中的數據的(請求體中的數據的);GET方式無請求體,所以使用@RequestBody接收數據時,前端不能使用GET方式提交數據,而是用POST方式進行提交。
  2. 在後端的同一個接收方法裏,@RequestBody與@RequestParam()可以同時使用,@RequestBody最多只能有一個,而@RequestParam()可以有多個。
  3. 當同時使用@RequestParam()和@RequestBody時,@RequestParam()指定的參數可以是普通元素、數組、集合、對象等等
    即:如果參數時放在請求體中,傳入後臺的話,那麼後臺要用@RequestBody才能接收到;如果不是放在
    請求體中的話,那麼後臺接收前臺傳過來的參數時,要@RequestParam來接收,或則形參前什麼也不寫也能接收。
    4.如果參數前寫了@RequestParam(xxx),那麼前端必須有對應的xxx名字才行(不管其是否有值,當然可以通過設置該註解的required屬性來調節是否必須傳),如果沒有xxx名的話,那麼請求會出錯,報400;如果參數前不寫@RequestParam(xxx)的話,那麼就前端可以有也可以沒有對應的xxx名字,如果有xxx名
    的話,那麼就會自動匹配;沒有的話,請求也能正確發送。追注:這裏與feign消費服務時不同;feign消費服務時,如果參數前什麼也不寫,那麼會被默認是@RequestBody的。

@RequestBody前後端數據的接受
前端是通過key-value的形式傳進來的,後端的接受情況如下:
json字符串中,
如果value爲"“的話,後端對應屬性如果是String類型的,那麼接受到的就是”",如果是後端屬性的類型是Integer、Double等類型,那麼接收到的就是null。
如果value爲null的話,後端對應收到的就是null。
千萬不能傳空值
在這裏插入圖片描述

相關用法:

@RequestBody可以以String、簡單對象、複雜對象來進行數據接受

User實體類:
在這裏插入圖片描述
Team實體類:
在這裏插入圖片描述
@RequestBody直接以String接收前端傳過來的json數據:
後端對應的Controller:
在這裏插入圖片描述
使用PostMan測試:
在這裏插入圖片描述
@RequestBody以簡單對象接收前端傳過來的json數據:
後端對應的Controller:
在這裏插入圖片描述
使用PostMan測試:
在這裏插入圖片描述
@RequestBody以複雜對象接收前端傳過來的json數據:
後端對應的Controller:
在這裏插入圖片描述
使用PostMan測試:
在這裏插入圖片描述
@RequestBody與簡單的@RequestParam()同時使用:
後端對應的Controller:
在這裏插入圖片描述
使用PostMan測試:
在這裏插入圖片描述
@RequestBody與複雜的@RequestParam()同時使用:
後端對應的Controller:
在這裏插入圖片描述
使用PostMan測試:
在這裏插入圖片描述
@RequestBody接收請求體中的json數據;不加註解接收URL中的數據並組裝爲對象:
後端對應的Controller:
在這裏插入圖片描述
使用PostMan測試:
在這裏插入圖片描述
原文中還有一些更深的探討,原理型的探討

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章