前言
在开发中我们往往会使用到post、get、delete等方法去请求数据,那么我们如何接到前端传过来的数据呢。不同数据类型又如何接收呢?
我们在使用postman
的时候看到五花八门的请求方法,众多的传输数据方法。
我们都知道在springboot中使用@RequestParam和@RequestBody去接收数据,带有时候又接收不到,或者报错,我们就来看看什么时候用@RequestParam
什么时候用@RequestBody
@RequestParam
以下是spring对@RequestParam的介绍
@RequestParam用来绑定查询参数
(也就是在URL上的参数)和from data
(也就是请求体,对应postman中的 from-data)的。
只要我发起请求时删除放在URL上和使用from data传参都可以使用 @RequestParam来接收
以上是spring文档中的解释,我们来逐条分析
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
@AliasFor("name")
String value() default "";
@AliasFor("value")
String name() default "";
boolean required() default true;
String defaultValue() default ValueConstants.DEFAULT_NONE;
}
使用实例:
@RequestParam(value = "param",required = false,defaultValue = "12")
Controller
@PostMapping("/test")
public R test(@RequestParam Long l,
@RequestParam Integer i,
@RequestParam Date date){
return R.ok().put("l",l).put("i",i).put("date",date);
}
也就是说我们传多个一样名称的值,可以使用数组或者列表去接收
使用实例:
Cotroller:
@GetMapping("/test")
//这里的数组换成列表也是可以的
public R test(@RequestParam("name") String[] names){
return R.ok().put("data",JSONUtil.toJsonStr(names));
}
当我们不知道传过来的是说明参数时就可以使用Map去接收
Controller
@PostMapping("/test")
public R test(@RequestParam Map<String,Object> param){
return R.ok().put("data",param);
}
@RequestBody
这里是Spring对@RequestBody的解读
这里主要提到了两点,第一点是使用@RequestBody注解,spring会通过HttpMessageConverter
去读取并且反序列化成为实体类。显然这里传的是json或者xml等类型的格式。所以@RequestBody一般使用在接收json的时候。
而且是通过HttpMessageConverter
去读取的,所以这里只读取一次就可以把全部数据读取到。所以不建议同时使用多个@RequestBody。
还说了可以使用@Valid去校验数据,这里我就不多介绍了,可以去查看我校验数据那篇文章
springboot数据校验——Hibernate Validator
我们可以结合着@RequestParam来使用,使用@RequestParam来接收URL数据,使用@RequestBody来接收json数据。
总结: