Spring 的 @RequestBody和@RequestParam

本文详细介绍了Spring MVC中@RequestParam和@RequestBody注解的用途和区别。@RequestParam用于处理`application/x-www-form-urlencoded`编码的内容,可以从GET和POST请求的参数集中获取值。而@RequestBody则用于处理非此编码格式的数据,如multipart/form-data或JSON,常用于POST请求中接收body中的数据。总结来说,@RequestBody适用于body中的数据,@RequestParam适用于query中的数据。
摘要由CSDN通过智能技术生成

@RequestParam
用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。
(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)

RequestParam可以接受简单类型的属性,也可以接受对象类型。 
实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

在Content-Type: application/x-www-form-urlencoded的请求中, 
get 方式中queryString的值,和post方式中 body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到。

@RequestBody
处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据(比如:不会对参数编码multipart/form-data)。


Get不能使用表单,只能在url中传参,传参方式只有这一种。 (因为没有HttpEntity,所以@RequestBody不适用。)
Post通过HttpEntity传递的参数,可以使用表单(@RequestParam、@RequestBody),也可以在url中传参(没有?)(@PathVariable&#

@RequestParam和@RequestBodySpring框架中常用的注解,用于处理HTTP请求参数的绑定。它们可以同时使用,用于处理不同类型的请求参数。 @RequestParam注解用于将请求参数绑定到方法的参数上。它可以用于绑定URL路径中的参数、查询参数或表单参数。通过@RequestParam注解,我们可以指定参数的名称、是否必需以及默认值等信息。 @RequestBody注解用于将请求体中的数据绑定到方法的参数上。它通常用于处理POST请求中的JSON或XML数据。通过@RequestBody注解,我们可以将请求体中的数据转换为Java对象,并在方法中进行处理。 当@RequestParam和@RequestBody同时使用时,通常是为了处理复杂的请求场景。比如,一个POST请求既包含了请求体中的JSON数据,又包含了URL路径中的参数或查询参数。在这种情况下,我们可以使用@RequestParam注解来获取URL路径中的参数或查询参数,使用@RequestBody注解来获取请求体中的JSON数据。 例如,下面是一个使用@RequestParam和@RequestBody同时使用的示例: ```java @PostMapping("/user/{id}") public void updateUser(@PathVariable("id") Long id, @RequestParam("name") String name, @RequestBody User user) { // 根据id更新用户信息 // name为URL路径中的参数 // user为请求体中的JSON数据 } ``` 在上述示例中,`@PathVariable("id")`用于获取URL路径中的id参数,`@RequestParam("name")`用于获取URL路径中的name参数,`@RequestBody User user`用于获取请求体中的JSON数据,并将其转换为User对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值