@Requestparam、@RequestBody、直接实体接收易错点分析

本文章是基于使用这些接收注解的易错点,适合已经初步掌握springMVC知识的.

转载自https://blog.csdn.net/weixin_43888891/article/details/126852207

1
2
3
4
5
6
@Data
public class User
{
private String userName;
private Integer age;
}

1.无注解

没有注解的时候可以选择params传参也可以选择body表单form-data传参,甚至可以两种同时传,两种同时传会将body传的参数使用逗号拼接上params传的参数==(反正一定要是value格式的)==
不管是body还是params 在不传参的情况下都不会报错,在后端会拿到null值,这块需要注意一下!假如是null值的情况下去get属性,或者是tostring就会空指针!如果传参的话,参数名要和controller当中定义的变量名一样才能接受到参数!任意请求方式 都是一样的!
可以有多个参数的,如果是实体类接参数的话,也是可以有多个实体类的!就算两个实体类当中有参数重复了,也不影响,两个实体类都会接到参数的!

对于这个请求http://localhost:8080/noAnno/url?msg=111&userName=张三

1
2
3
4
5
6
7
8
9
10
11
@RestController
@RequestMapping("/noAnno")
public class NoAnnoController {

@GetMapping("/url")
public String getMapping(String msg ,User ,user) {
return msg + user;
}
}
//测试结果就是,msg == 11,user中的userName = '张三',age = null
//也就是根据后面拼接的属性名去找对应的值,无论是在类当中还是在直接参数中

2.@Requestparam

  • 带这个注解默认必须传值(required默认true),除非自己改required

​ defaultValue表示前端传不传值都可以,传值就以前端的为准,不传值就以设置的defaultValue值为准

@RequestParam(name = "pageNo",required = false,defaultValue = "1") Integer pageNo

  • @RequestParam可以手打http://xxx?参数名=值&参数名=值,也可以使用postman的param

3.@RequestBody

  • @RequestBody一般被用来接收http请求中body中json数据。

{"userName":"111","age":"11"}·,传输json数据,也可以不传key。这里有一点需要注意,mvc给我们做了参数类型转换,Params 对象当中的age是Integer类型,但是json传字符串,照样可以映射进去。Boolean、BigDecimal、Integer、String、Date这些其实都可以映射进去的。当然Date相对来说比较特殊一点。传yyyy-MM-dd格式是不会报错的。但是其他格式可能就会报错了,一般使用Date类型接参数涉及到需要咱们自己格式化,关于日期相关问题感兴趣的可以看这一篇文章: