一、@RequestParam注解
1、@RequestParam的参数:
(1)value、name 属性都标识请求参数名(必须配置);
(2)@required:参数是否必传,默认为 true,可以设置为非必传 false;(如果设置了必传或默认,请求未传递参数,将会抛出异常);
(3)defaultValue:参数默认值,如果设置了该值,required 将会自动设置为 false;
2、@RequestParam获取的参数放在哪儿?
(1)Spring中的@RequestParam注解接收的参数大多数场景是来自requestHeaders中,即get请求头,也就是url中,格式为:
http://localhost:8080/optimus-prime/project/test?id=1&name=yc&age=23
由于 url 长度有限制,所以参数需要限制数量和值的长度
(2)get请求的 requestHeaders 中 content-type 这个字段,使用 form-data 表单形式携带参数请求
1)传入的参数是基本类型
对应的java代码是:
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test(@RequestParam("id") Integer id,
@RequestParam("name") String name,
@RequestParam("age") Integer age) {
}
2)传入的参数是集合类型
对应的java代码是:
@GetMapping(value = "/device/list/excel")
public String queryDeviceListsExcel(@RequestParam("deviceNumList") List<String> deviceNumList){
LOGGER.info("查询视频设备列表, params:{}" , deviceNumList);
return deviceService.queryDeviceListsExcel(deviceNumList);
}
二、@RequestBody注解
1、@RequestBody的参数:
@RequestBody注解只拥有一个参数:required ,默认为 true,即对象中的属性必须有一个要传,否则会抛出异常:org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing。
2、@RequestBody获取的参数放在哪儿?
Spring中的@RequestBody注解是用来接收请求体中的参数数据,即requestBody请求体中,故不受参数数据长度的限制
对应的java代码是:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
}
@RequestMapping(value = "/test", method = RequestMethod.POST)
public void test(@RequestBody User user) {
}