SpringBoot @ResponseBody、@RequestBody和@RequestParam 基本介紹
這三個注解主要用於前后端分離架構中 SpringBoot 接收或者傳輸特定格式數據,現在重新捋一遍。
1、@ResponseBody
位置:注解在方法頭上
作用:將方法的返回值以 json/xml
的數據格式返回給客戶端,如果是JavaBean
對象,調用 getxxx()
方法獲取屬性值,如果是 map
集合,調用 get(key)
方法獲取屬性值,然后以鍵值對的方式轉成 json字符串
。
@GetMapping(value = "/findById")
//注解在方法頭上,返回 json/xml
@ResponseBody
public Result findById(@RequestParam Long id) {
User user = userService.findById(id);
return ResultUtil.success(user);
}
打印結果如下
沒有該注解的影響:將返回一個ModelAndView
給客戶端,即返回視圖,常用的場景是跳轉 jsp 頁面。
提示沒有該頁面。
2、@RequestBody
位置:注解在方法的形參前
作用:接收 json/xml
封裝成 JavaBean 對象或者集合,注意 xml
格式的支持需要添加額外的依賴。
@GetMapping(value = "/findById")
@ResponseBody
// 注解在形參前,用於接收 json/xml
public Result findById(@RequestBody User testUser) {
User user = userService.findById(testUser.getId());
return ResultUtil.success(user);
}
傳參格式如下:
注意點:如果是前端頁面傳參時,需要手動設置 contentType: "application/json"
,默認的為 ``application/x-www-form-urlencoded`。
沒有該注解的影響:JavaBean 對象或集合將無法接收 json/xml
3、@RequestParam
位置:注解在方法的形參前
作用:用於接收基本數據類型及其包裝類。 通過value
屬性指定傳參名稱,required
屬性指定是否必傳,默認為必傳,defaultValue
屬性指定默認值。
@GetMapping(value = "/findById")
@ResponseBody
//常用於接收基本數據類型及其包裝類
public Result findById(@RequestParam(value = "id", required = true, defaultValue = "2") Long id) {
User user = userService.findById(id);
return ResultUtil.success(user);
}
傳參格式如下:
注意點:只能使用基本數據類型及其包裝類接收數據。
沒有該注解的影響:該注解不為必寫屬性,如果想對參數進行限制可使用。