PostgreSQL表仅部分字段可接收数据的问题求助
问题原因及解决办法
核心问题
JSON请求中的字段采用下划线命名(date_added、last_edited),但实体类对应属性是驼峰命名(dateAdded、lastEdited),Spring默认的Jackson序列化规则未开启下划线与驼峰的自动转换,导致这两个字段无法从JSON中绑定值,最终插入数据库时为null,触发非空约束错误。
解决办法
方式一:全局开启下划线转驼峰映射
在Spring Boot配置文件中添加Jackson命名策略配置:
- 若使用
application.yml:
spring: jackson: property-naming-strategy: SNAKE_CASE
- 若使用
application.properties:
spring.jackson.property-naming-strategy=SNAKE_CASE
该配置会全局生效,所有下划线命名的JSON字段将自动映射到驼峰命名的实体属性。
方式二:局部字段指定JSON映射
如果不需要全局配置,可在实体类对应字段上添加@JsonProperty注解,明确指定JSON字段名:
@Data @Entity @Table(name = "recipe", schema = "public") @AllArgsConstructor @NoArgsConstructor public class Recipe { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", updatable = false, nullable = false) private long id; @Column(name = "name") private String name; @Column(name = "instructions") private String instructions; @Column(name = "date_added", nullable = false) @JsonProperty("date_added") // 指定JSON字段名 private String dateAdded; @Column(name = "last_edited", nullable = false) @JsonProperty("last_edited") // 指定JSON字段名 private String lastEdited; }
验证
修改完成后重新通过Postman发送原JSON请求,date_added和last_edited字段会正确绑定值,插入数据库时不再触发非空约束错误。
内容的提问来源于stack exchange,提问作者Icarus
相关产品推荐
相关产品推荐

