基本介紹
-
@requestparam
屬性介紹
- required:表示是否必須,默認為
true
,必須 - defaultValue:可設置請求參數的默認值
- value:為接收url的參數名(相當於key值)
-
@requestbody
屬性介紹
- required:表示是否必須,默認為
true
,必須
使用方式
@requestparam
@RequestParam用來處理 Content-Type:
application/x-www-form-urlencoded
編碼的內容,Content-Type
默認為該屬性。@RequestParam也可用於其它類型的請求,例如:POST、DELETE等請求。但是這樣不支持批量插入數據,如果改用json
字符串來傳值的話,類型設置為 application/json
,點擊發送的話,會報錯,后台接收不到值,為null
。這時候,注解@RequestBody就派上用場了。
注意:方法中參數類型為實體時不能夠使用@RequestParam,否則會報400的錯誤。當然如果把@RequestParam(required = false)加到試題類型參數前面,就不會報錯,但是實體類也不會被賦值。
@GetMapping("test1") @ResponseBody public String test1(String userName, Integer age) { return "姓名:" + userName + ",年齡:" + age; } @GetMapping("test2") @ResponseBody public String test2(UserEntity userEntity, String userName, Integer age) { return "用戶:" + JSONUtil.toJsonStr(userEntity) + "姓名:" + userName + ",年齡:" + age; } @GetMapping("test3") @ResponseBody public String test3(UserEntity userEntity, @RequestParam(name = "name", required = false) String userName,Integer age) { return "用戶:" + JSONUtil.toJsonStr(userEntity) + "姓名:" + userName + ",年齡:" + age; }
@requestbody
注解@RequestBody接收的參數是來自requestBody中,即請求體。一般用於處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數據,比如:application/json、application/xml等類型的數據。就application/json
類型的數據而言,使用注解@RequestBody可以將body里面所有的json數據傳到后端,后端再進行解析
GET請求中,因為沒有HttpEntity,所以@RequestBody並不適用。
POST請求中,通過HttpEntity傳遞的參數,必須要在請求頭中聲明數據的類型Content-Type,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數據,然后綁定到相應的bean上。
注意:前端使用$.ajax的話,一定要指定 contentType: "application/json;charset=utf-8;"
,默認為 application/x-www-form-urlencoded
。
@PostMapping("test4") @ResponseBody public String test4(@RequestBody List<UserEntity> lists) { return "用戶:" + JSONUtil.toJsonStr(lists); } @PostMapping("test5") @ResponseBody public String test5(@RequestBody List<Map<String, Object>> maps) { return "用戶:" + JSONUtil.toJsonStr(maps); }
通過postman正確調用:
如果使用form表單提交,就會報錯: