说明白注解@RequestParam与@RequestBody的使用场景

概要

  @RequestParam和@RequestBody是Spring框架中常用的两种请求参数注解。有时候容易搞不清楚,今天我们就发简单的说一说。

@RequestParam使用场景

  @RequestParam注解表示请求参数的键值对。当使用@RequestParam注解对请求参数进行绑定时,Spring会将请求参数按照参数名逐个与方法的形参逐个绑定。如果请求参数有多个值,则绑定的值是第一个。
  下面是@RequestParam的使用示例:

@RequestMapping(value = "/test", method = RequestMethod.GET)
@ResponseBody
public String testRequestParam(@RequestParam("name") String name, @RequestParam("age") int age) {
  // ...
}

  在上述示例中,使用@RequestParam注解来绑定请求参数,当发送一个GET请求:

http://localhost:8080/test?name=Tom&age=24

  则@RequestParam会将name请求参数绑定到方法的name形参,将age请求参数绑定到方法的age形参。

@RequestBody使用场景

  @RequestBody注解表示请求的消息体。它可以将请求的JSON格式的数据转换成Java对象。在RESTful风格的接口中,常常用于接收客户端发送的JSON格式数据,并使用Jackson来将JSON字符串转换成对应的Java对象。
  下面是@RequestBody的使用示例:

@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public String testRequestBody(@RequestBody User user) {
  // ...
}
public class User {
  private String name;
  private int age;
  // ...
}

  在上述示例中,使用@RequestBody注解来绑定请求的消息体。当发送一个POST请求:

http://localhost:8080/test

{

   "name": "Tom",

   "age": 24

}

  则@RequestBody会将请求的消息体解析成User对象,并绑定到方法的user形参中。

@RequestParam和@RequestBody的区别

`
  区别主要有以下两个方面:
  第一个区别是请求参数的位置不同。@RequestParam注解用于绑定请求参数,而@RequestBody注解用于绑定请求的消息体。
  第二个区别是数据格式不同。@RequestParam注解处理的是键值对形式的请求参数,如age=24,而@RequestBody注解处理的是JSON、XML等格式的请求消息体。
  另外,@RequestParam注解比@RequestBody注解要常用,前者适用于单个简单类型的参数,后者适用于多个复杂对象类型的参数。同时,需要注意的是,@RequestBody注解标注的参数通常需要设置Content-Type参数。例如:

@RequestMapping(value = "/test", method = RequestMethod.POST, consumes="application/json")
@ResponseBody
public String testRequestBody(@RequestBody User user) {
  // ...
}

小结

  在上述示例中,加上consumes="application/json"的目的是告诉Spring MVC,接收后端数据格式为application/json,否则会默认使用application/x-www-form-urlencoded的格式。由此,就需要根据实际场景以及数据格式的不同来选择@RequestParam或者@RequestBody。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值