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

Postman调用Save接口时遇CREATION_DATE非空约束错误求助

解决H2数据库插入时"NULL not allowed for column 'CREATION_DATE'"错误

从你给出的错误信息、请求JSON和实体类代码来看,核心问题是请求中的creation_date字段没有正确映射到实体类的creationDate属性,导致插入数据库时该字段值为null,触发了表字段的非空约束(nullable=false)。下面是具体的排查和解决步骤:

问题分析

  1. 字段命名不匹配:
    你的实体类中日期属性是驼峰命名的creationDate,但请求JSON里对应的是下划线命名的creation_date。如果你的JSON序列化框架(比如Jackson)没有配置驼峰与下划线的自动转换规则,就无法将JSON字段映射到实体属性,最终导致creationDate为null。

  2. 日期格式解析问题:
    即使字段名匹配,"2017-05-22T20:19:37.855"这种带T的日期字符串,默认情况下可能无法被自动转换成java.util.Date类型,也会导致属性值为null。

解决方案

方案1:全局配置驼峰-下划线自动转换

如果是Spring Boot项目,直接在配置文件中添加Jackson的命名策略配置,让框架自动处理字段名转换:

# application.properties
spring.jackson.property-naming-strategy=SNAKE_CASE

或者YAML格式:

# application.yml
spring:
  jackson:
    property-naming-strategy: SNAKE_CASE

这样所有下划线命名的JSON字段都会自动映射到驼峰命名的实体属性,last_edit_date也会被正确映射到lastEditDate。

方案2:手动指定字段映射(局部配置)

如果不想全局配置,可以在实体类的日期属性上添加@JsonProperty注解,明确指定对应的JSON字段名:

@Column(name = "creation_date", nullable=false)
@JsonProperty("creation_date") // 指定JSON中的字段名
private Date creationDate;

@Column(name = "last_edit_date", nullable=false)
@JsonProperty("last_edit_date")
private Date lastEditDate;

方案3:确保日期格式正确解析

如果存在日期字符串转Date失败的情况,在属性上添加@JsonFormat注解指定日期格式:

@Column(name = "creation_date", nullable=false)
@JsonProperty("creation_date")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS", timezone = "GMT+8") // 根据你的时区调整
private Date creationDate;

额外提醒

你请求JSON中一些字段传的是字符串"NULL"(比如pref_bill_address_uid),但实体类中对应的是CustomerAddress或Long类型,这会导致类型转换错误,后续也可能抛出异常。建议将这些不需要传值的字段改为真正的null(去掉引号),或者根据业务逻辑调整字段类型和传值方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:26:47