@RequestBody和@RequestParam⽤法总结
@RequestBody和@RequestParam的使⽤
@RequestBody
@RequestBody主要⽤来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET⽅式⽆请求体,所以使⽤@RequestBody接收数据时,前端不能使⽤GET⽅式提交数据,⽽是⽤POST⽅式进⾏提交。在后端的同⼀个接收⽅法⾥,@RequestBody与@RequestParam()可以同时使
⽤,@RequestBody最多只能有⼀个,⽽@RequestParam()可以有多个。
@RequestBody接收的参数是来⾃requestBody中,即请求体。⼀般⽤于处理⾮Content-Type: application/x-www-form-urlencoded编码格式的数据,⽐
如:application/json、application/xml等类型的数据。
parameter数据类型GET请求中,因为没有HttpEntity,所以@RequestBody并不适⽤。
POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使⽤HandlerAdapter 配置来解析HttpEntity 中的数据,然后绑定到相应的bean上。
如果前端向后端传递的是⾮实体类对象,后台也可以使⽤@RequestBody注解,那就⽤List<Map<String, String>>来接收
@RequestParam
⽤来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
POST类型和GET类型都可以使⽤@RequestParam注解来接收参数
@RequestParam注解有三个参数
required表⽰是否必须,默认为true,必须。
defaultValue可设置请求参数的默认值,如果设置了该值,required=true将失效,⾃动为false,如果没有传该参数,就使⽤默认值。
value为接收url的参数名(相当于key值)。
举例:
/
/⼀下两种写法效果⼀模⼀样
@RequestParam("") 或 @RequestParam(value="")
//当配置多个属性的时候
@RequestParam(value="", required=true, defaultValue="")
//如果使⽤下⾯这种⽅式接值,那么前台穿过来的参数名称就要和inputStr⼀样,这⾥才能接收到
@RequestParam String inputStr
//但是如果加上value属性的话,那么前台传过来的参数名称就要和value属性中的⼀致才能接收到
@RequestParam(value="aa") String inputStr
//如果加上required属性,当required=true就是必须要传参值过来,当required=false表⽰不传的话,会给参数赋值为null
@RequestParam(value="aa", required=true)
/
/有⼀种特殊情况是参数为int类型时,设置required=false后参数不传值得话会给int类型参数赋值为null,⽽int是基本数据类型不能赋值为null,所以会报错,此时要将int类型改为Integer类型@RequestParam(value="inputInt", required=false) int inputInt
@RequestParam接收对象类型
这⾥举个栗⼦
实体类是People属性如下
private String name; //姓名
private int age; //年龄
private String sex; //性别
前台代码(拿JSP举例)
<input type="text" value="⿊⿊" name="name">
<input type="text" value="18" name="age">
<input type="text" value="男" name="sex">
后台代码
int addPeople(@RequestParam People people) {}
//这时候使⽤@RequestParam注解修饰参数只要前台传的参数名称和people类中的属性名⼀致就可以⾃动封装进People实体类
这⾥我⼜想到⼀个问题,加和不加@RequestParam参数有什么区别呢?
其实不加@RequestParam参数也没问题(此时的参数名称要和前台传过来的参数名称保持⼀致),也可以接收到前台传过来的参数,当前台没有传值时
接收到的为null,只不过使⽤@RequestParam是为了⽤它⾥⾯的⼀些属性,⽐如默认值或required属性。
总结
1. Post请求接收@RequestBody修饰的参数和@RequestParam修饰的参数,⽽Get请求则只能接收@RequestParam修饰的参数。
2. 如果前端传的是Json类型的对象,后台就要使⽤@RequestBody修饰的实体类接收,如果是单个属性就使⽤@RequestParam修饰的变量或实体类
接收
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论