springboot接口接收list类型入参无数据,@RequestBody无法映射List数据

本文探讨了在SpringBoot项目中使用@RequestBody注解时遇到的问题,特别是针对List类型的参数无法正常注入的情况。文章详细介绍了排查过程及最终解决方案,并指出@ApiModel注解的不当使用可能是导致问题的原因。
摘要由CSDN通过智能技术生成
巨坑!!!!

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的注解怎么会对参数映射产生影响是很难想到的事

如果对你有帮助,动动小手给作者一点爱心赞吧,感谢!

`@RequestBody List<UnionFundsBalance> info` 是Spring MVC中的一种注解,用于接收HTTP请求体中的JSON数据,并将其映射到一个`List<UnionFundsBalance>`类型的对象。`UnionFundsBalance` 是一个Java对象,可能是包含一些账户余额信息的实体类。 前端(通常是JavaScript或HTML)要传递这样的数据给服务器,可以通过以下几种常见方式: 1. **JSON数组**:前端可以直接构建一个JSON格式的数组,例如: ```javascript var formData = [ { unionId: '...', accountId: '...', balance: '...' }, // 其他字段... ... // 可能有多条数据 ]; $.ajax({ url: '/union/UnionFundsBalance/insert', method: 'POST', contentType: 'application/json', data: JSON.stringify(formData), success: function(response) { // 处理响应 } }); ``` 2. **表单提交**:如果数据是以键值对的形式存在,可以使用普通的form表单提交,并设置`enctype="application/x-www-form-urlencoded"` 或 `enctype="multipart/form-data"`: ```html <form id="form" action="/union/UnionFundsBalance/insert" method="post"> <input name="unionId[]" type="text" /> <!-- 添加其他字段 --> <button type="submit">Submit</button> </form> ``` JavaScript可以通过`FormData`对象收集并发送数据: ```javascript document.getElementById('form').addEventListener('submit', function(event) { event.preventDefault(); var formData = new FormData(this); $.ajax({ url: this.action, type: this.method, data: formData, processData: false, // 必须关闭,因为formData不需处理 contentType: false, success: function(response) { // 处理响应 } }); }); ``` 无论哪种方式,关键是要确保前端发送的数据结构与你在服务器端定义的`List<UnionFundsBalance>`相符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值