详解@RequestParam和@RequestBody

简介: 你好看官,里面请!今天笔者讲的是@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等类型的请求数据。

相关文章
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
1607 0
|
存储 算法 Nacos
Nacos支持哪些协议
Nacos支持哪些协议
|
存储 JSON fastjson
再也不用心惊胆战地使用FastJSON了——序列化篇
本篇将主要介绍json序列化的详细流程。本文阅读的FastJSON源码版本为2.0.31。
4637 49
|
关系型数据库 MySQL 程序员
菜鸟之路day31一一MySQL之多表设计
本文由blue撰写于2025年5月9日,主要介绍了MySQL多表设计的三种关系:一对多、一对一和多对多。一对多通过在“多”的一方添加关联字段实现,如部门与员工的关系;一对一通常用于单表拆分,通过唯一外键关联,例如学生与学生证的关系;多对多则需创建中间表,包含两个外键分别关联两方主键,如学生与课程的关系。文中还提供了实际案例,包括分类表、菜品表、套餐表及它们之间的关联设计,详细展示了多表设计的应用场景与实现方法。
491 14
|
JSON 数据格式
@SpringQueryMap 、@RequestPart 、@RequestParam 比较与说明
@SpringQueryMap 、@RequestPart 、@RequestParam 比较与说明
2262 2
|
JSON 前端开发 Java
深入解析SpringBoot的请求响应机制
深入解析SpringBoot的请求响应机制
1335 1
|
XML JSON Java
【Java用法】@RequestParam、@RequestBody、@ResponseBody和@PathVariable的使用与区别
【Java用法】@RequestParam、@RequestBody、@ResponseBody和@PathVariable的使用与区别
1242 0
Exception in thread "main" java.lang.IllegalArgumentException: U+6570 ('.notdef') is not available in the font Helvetica-Bold, encoding: WinAnsiEncoding 这个问题如何解决
【6月更文挑战第19天】Exception in thread "main" java.lang.IllegalArgumentException: U+6570 ('.notdef') is not available in the font Helvetica-Bold, encoding: WinAnsiEncoding 这个问题如何解决
3107 2
|
Java 调度 数据库
Docker安装部署XXL-Job
Docker安装部署XXL-Job
2404 1
|
应用服务中间件 nginx
cmd 杀掉 nginx后台进程 命令杀掉nginx后台 nginx 常用命令
cmd 杀掉 nginx后台进程 命令杀掉nginx后台 nginx 常用命令
2686 0