详解@RequestParam和@RequestBody

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 你好看官,里面请!今天笔者讲的是@RequestParam和@RequestBody。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。

详解@RequestParam和@RequestBody

如果觉得写的还可以,点个赞支持一下笔者呗!你的点赞和关注会让我更快更新哦。笔者会持续更新关于Java和大数据有关的文章。目前集中精力在更新java框架的内容。

@RequestParam

注解@RequestParam接收的参数是来自requestHeader中,即请求头。

RequestParam可以接受简单类型的属性,也可以接受对象类型。

@RequestParam有四个配置参数:

属性

说明

name

请求中的参数名。

name 为 @RequestParam 注解 value 属性的别名,它与 value 属性完全等价。

value

请求中的参数名。

value 为 @RequestParam 注解 name 属性的别名,它与 name 属性完全等价。

required

该请求参数名是否必须,默认值为 true,即默认情况下请求中必须包含对应的请求参数名,否则就会抛出异常。

注意:required 属性是对请求参数名设置的规则,但并没有对该请求参数是否有值进行限制。也就是说,当 required 属性为 true 或没有设置 required 属性时,请求中就必须包含对应的参数名,至于该请求参数是否有值则无所谓。

defaultValue

请求参数的默认值。

注意: defaultValue 属性会使 required ="true" 失效,即将 required 属性自动设置为 false。

@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。

所以在postman中,要选择body的类型为 x-www-form-urlencoded,这样在headers中就自动变为了 Content-Type : application/x-www-form-urlencoded 编码格式。

但是不支持批量插入数据,如果改用 json 字符串来传值的话,类型设置为 application/json,点击发送的话,会报错,后台接收不到值,为 null。

这时候,需要用到@RequestBody。

@RequestBody

@RequestBody的作用其实是将json格式的数据转为java对象。

注解@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上。

后台接收前台传来的json对象用PostMapping

例一:

向表中批量插入数据

举个批量插入数据的例子,Controller层的写法如下图所示:

image.png

image.png

批量向表中插入两条数据,这里的 saveBatchNovel()方法已经封装了 JPA的 saveAll() 方法。body 里面的 json 语句的 key 值要与后端实体类的属性一一对应

例二:

后端解析json数据

上述示例是传递到实体类中的具体写法,那么如果传递到非实体类中,body里面的json数据需要怎么解析呢?我们再来看下面这个例子:

在body中,我们还是输入上面的json数据,根据分析,上面的json数据是一个List数组内嵌套着map对象,那么在后台的接收形式可写为 List>,具体代码如下图所示:

image.png

四、总结

注解@RequestParam接收的参数是来自requestHeader中,即请求头。通常用于GET请求,像POST、DELETE等其它类型的请求也可以使用。

注解@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据。通常用于接收POST、DELETE等类型的请求数据。

相关文章
|
3月前
|
JSON 数据格式
@SpringQueryMap 、@RequestPart 、@RequestParam 比较与说明
@SpringQueryMap 、@RequestPart 、@RequestParam 比较与说明
249 2
|
5月前
|
JSON Java 数据格式
@RequestParam与@RequestBody使用对比
@RequestParam与@RequestBody使用对比
85 8
|
XML JSON 数据格式
@RequestParam @RequestBody @PathVariable 等参数绑定
@RequestParam @RequestBody @PathVariable 等参数绑定
@RequestParam()和@PathVariable()的区别
@RequestParam()和@PathVariable()的区别
|
XML SQL JSON
@PathVariable、@RequestBody、@RequestParam、@ResponseBody、@Param的详解和用法
@PathVariable、@RequestBody、@RequestParam、@ResponseBody、@Param的详解和用法
172 0
|
Java API Spring
@RequestParam和@PathVariable的区别
@RequestParam注解获取URL中携带的请求参数的值既URL中“?”后携带的参数,传递参数的格式是:key=value;@PathVariable注解用于获取URL中路径的参数值,参数名由RequestMapping注解请求路径时指定,常用于restful风格的api中,传递参数格式:直接在url后添加需要传递的值即可
200 0
|
JSON 前端开发 数据格式
@RequestParam、@RequestBody、@PathVariable区别和案例分析
@RequestParam、@RequestBody、@PathVariable区别和案例分析
171 2
|
JSON 数据格式
@PathVariable,@RequestParam,@RequestBody区别
@PathVariable,@RequestParam,@RequestBody区别
|
XML JSON 数据格式
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(二)
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(二)
188 0
SpringMVC - @RequestMapping、@ResponseBody、@RequestBody、@RequestParam、@PathVariable(二)