You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot POST新增Customer接口报first_name非空约束错误

问题根因

从报错信息可以看到插入的记录只有email字段有值,serial_number是long类型默认值0,first_name/last_name/mobile_number全为null,核心原因是JSON反序列化字段映射失败:

  • 测试时传入的请求体用的是下划线命名格式(first_name/last_name/serial_number/mobile_number),但Spring默认集成的Jackson反序列化规则是按Java属性的驼峰名做精确匹配,Customer实体类对应属性是驼峰命名(firstName/lastName/serialNumber/mobileNumber),既没有配置全局下划线转驼峰规则,也没有给字段加注解指定映射的JSON字段名,导致这些名字不匹配的字段无法被赋值,只有属性名和传参名完全一致的email字段成功注入了值。
  • 贴出的接口代码中cutomerRepository存在拼写错误(正确应为customerRepository),如果实际代码中存在该笔误会直接导致编译失败,可自行核对。
解决方案

三选一即可,根据项目实际命名规范选择:

  • 方案1(无需改代码,快速验证):直接修改Postman请求体的字段名,和实体类驼峰属性保持一致,请求体示例:
{
    "serialNumber": 1001,
    "firstName": "张",
    "lastName": "三",
    "email": "tttt@gmail.com",
    "mobileNumber": "13800000000"
}
  • 方案2(全局配置,适合全项目统一下划线命名的场景):在项目配置文件中添加Jackson的命名策略配置,自动完成下划线字段到驼峰属性的映射。
    如果是application.yml配置:
    spring:
      jackson:
        property-naming-strategy: SNAKE_CASE
    
    如果是application.properties配置:
    spring.jackson.property-naming-strategy=SNAKE_CASE
    
  • 方案3(局部字段配置,适合仅个别字段需要特殊映射的场景):给需要映射的实体类字段添加@JsonProperty注解,指定对应的JSON字段名,示例:
    @Column(name = "first_name")
    @JsonProperty("first_name")
    private String firstName;
    
    @Column(name = "last_name")
    @JsonProperty("last_name")
    private String lastName;
    
    @Column(name = "serial_number")
    @JsonProperty("serial_number")
    private long serialNumber;
    
    @Column(name = "mobile_number")
    @JsonProperty("mobile_number")
    private String mobileNumber;
    
排查建议

开发阶段可以在接口方法第一行打个断点,debug查看@RequestBody注入的customer对象各字段值,能第一时间确认参数是否正确注入,不用等到数据库抛约束异常再定位问题。

内容的提问来源于stack exchange,提问作者renad sahal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:36:18