uestBody
和 @RequestParam
是 Spring MVC 中用于处理 HTTP 请求参数的两种常用注解,它们的主要区别在于它们各自处理的数据类型和方式。
@RequestParam
- 用途:
@RequestParam
用于将请求参数(即 URL 中的查询参数,或者表单提交的参数)绑定到你控制器(Controller)的方法参数上。 - 数据类型:它支持简单数据类型(如 String、int、float 等)以及复杂对象(通常是对象中的某个属性被绑定到请求参数上)。但是,对于复杂对象,通常每个属性都需要一个对应的请求参数。
- 示例:如果你有一个 URL 类似
http://example.com/search?query=spring
,那么在你的控制器方法中,你可以使用@RequestParam("query") String query
来获取query
参数的值。 - 适用场景:适用于 GET 请求或 POST 请求中的表单数据(
application/x-www-form-urlencoded
或multipart/form-data
)。
@RequestBody
- 用途:
@RequestBody
用于将 HTTP 请求体(Body)中的 JSON 或 XML 数据绑定到 Java 对象上。这意呀着你可以直接将整个请求体转换成一个 Java 对象,而不需要逐个处理请求参数。 - 数据类型:它通常用于处理复杂对象,整个请求体被转换成一个 Java 对象。
- 示例:如果你发送一个 JSON 对象到服务器,你可以在你的控制器方法中使用
@RequestBody MyObject myObject
来直接将这个 JSON 对象转换成MyObject
类型的 Java 对象。 - 适用场景:适用于 POST 和 PUT 请求,尤其是当请求体中包含大量数据或复杂的对象结构时。通常与
Content-Type: application/json
一起使用。
总结
- 处理位置:
@RequestParam
处理的是 URL 中的查询参数或表单数据,而@RequestBody
处理的是 HTTP 请求体中的数据。 - 数据类型:
@RequestParam
适用于简单数据类型和复杂对象的单个属性,而@RequestBody
适用于将整个请求体转换为 Java 对象。 - 使用场景:
@RequestParam
适用于 GET 请求和 POST 请求中的表单数据,而@RequestBody
适用于 POST 和 PUT 请求中的 JSON 或 XML 数据。