巨坑!!!!
springboot做接口时,由于业务原因,需要在实体类中声明一个List类型的变量,通过@RequestBody进行同步数据
实体类中有个List存储其他实体类,想通过@RequestBody进行同步的,但老是同步不了
关于@RequestBody同步List类型等其他类型入参为null问题解决办法:
1.查看是否使用@Data的getset方法,由于lombook生成的getset方法和我们自己写的getset方法是不一样的,自己生成一下getset,再加个Serializable序列化
2.查看字段的命名,使用驼峰是正确的,但是要求前两个字母都为小写,出错原因可能就是前两个字母一小一大,导致生成的getset方法找不到这个变量,例如: cOmpost是不规范的,正确:comPost
3.为什么说巨坑呢,因为上面那些办法都没用上,产生注入不了list,我还发现一个原因
3.1我把controller里的其他接口都删除,只留一个注入list的接口,发现可以正常注入,当加上其他接口在同一个controller时就不能正常注入,初步怀疑是语法问题,后来检查了一下语法是没问题的,从入参开始排查到Vo实体类中看有没有什么语法漏洞,以下是我实体类
@Data
@TableName(value = "UserInfo")
@ApiModel("用户信息")
public class UserInfoVo extends BaseVo{
private static final long serialVersionUID = 1L;
//用户id
@ApiModelProperty(value = "用户id")
@TableId(type = IdType.AUTO)
private int userId;
private List<SysUserRole> CommpyVo;
//用户名称
@ApiModelProperty(value = "用户名称")
private String username;
问题是出在@ApiModel(“用户信息”)这个注解上,在我其他的实体类上也注解了@ApiModel(“用户信息”),就是注解值一模一样,我个人猜测是在编译的时候生成的类的标识是一样的,导致在同一个controller中找到两个同样的实体类标识,导致映射失败,后来把这个注解值改成唯一值就能正常映射了
确实swwage的注解怎么会对参数映射产生影响是很难想到的事
如果对你有帮助,动动小手给作者一点爱心赞吧,感谢!