使用Spring JPA CrudRepository保存MySQL时name字段为null的问题
Spring Boot JPA CrudRepository存储时name字段为null的问题排查与解决
可能的原因
- 前端请求参数名与实体类
name字段不匹配,导致Spring MVC参数绑定失败,name未被赋值 - 实体类字段访问权限问题,JPA无法正确读取/写入
name字段 - 数据库表结构中
name列允许null,且前端未传入有效值 - 参数绑定方式错误(如JSON请求未加
@RequestBody)
解决步骤
1. 验证前端参数与控制器接收情况
- 确保前端表单的输入框
name属性为name,例如:<input type="text" name="name" placeholder="请输入姓名"> - 在控制器方法中打印实体对象,确认
name是否已被正确接收:
如果打印结果中@RequestMapping("/Reg") public String Reg(Registration register) { System.out.println(register.toString()); // 控制台输出对象,查看name字段值 reg.save(register); return "Login.jsp"; }name为null,说明是前端参数未正确传递或绑定失败;如果有值,则问题出在JPA存储环节。
2. 调整实体类字段访问策略
JPA默认支持字段访问和属性访问两种方式,当前实体类字段为包私有权限,可能导致Hibernate无法正常访问。可以通过两种方式解决:
- 方式一:将实体类字段改为
public权限:@Entity public class Registration { @Id public String username; public String name; public String password; // 其他字段改为public,getter/setter保持不变 } - 方式二:明确指定属性访问策略(通过getter/setter访问字段):
@Entity @Access(AccessType.PROPERTY) public class Registration { // 字段保持原有权限,getter/setter不变 }
3. 检查数据库表结构
- 确认数据库中
name列的名称与实体类字段名一致(此处应为name) - 如果业务上
name为必填字段,可修改表结构将name列设置为NOT NULL,这样当传入null时会直接抛出异常,快速定位问题:ALTER TABLE registration MODIFY COLUMN name VARCHAR(255) NOT NULL;
4. 适配参数绑定方式(针对JSON请求)
如果前端是通过AJAX提交JSON数据,需要在控制器方法添加@RequestBody注解,并确保请求头包含Content-Type: application/json:
@RequestMapping(value = "/Reg", method = RequestMethod.POST) public String Reg(@RequestBody Registration register) { reg.save(register); return "Login.jsp"; }
内容的提问来源于stack exchange,提问作者Faisal
相关产品推荐
相关产品推荐

