Spring Boot 3.1控制器POST请求出现application/json类型错误
在Spring Boot 3.1、Java 18、MySQL 8环境下调用POST接口提交JSON数据时出现415错误,且断点无法进入控制器方法,经排查是Bird实体关联的HealthCheck类导致的问题,可通过以下方案解决:
修复关联关系的序列化循环问题
HealthCheck类与Bird类的多对一关联容易引发序列化循环引用,导致Jackson无法正常解析请求体。可在HealthCheck的Bird关联字段上添加@JsonIgnore注解,直接忽略该字段的序列化/反序列化;若需要保留关联数据,可使用@JsonManagedReference(标注在Bird类的HealthCheck集合字段上)和@JsonBackReference(标注在HealthCheck的Bird字段上)来处理双向关联的序列化逻辑。配置LocalDateTime字段的序列化规则
Spring Boot 3.x默认使用的Jackson版本对LocalDateTime的序列化需要明确配置:- 在
application.properties中添加全局配置:spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.serialization.write-dates-as-timestamps=false - 或者在HealthCheck类的LocalDateTime字段上添加注解单独配置:
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime checkTime;
- 在
确保实体类符合序列化要求
检查HealthCheck类是否包含无参构造方法(Jackson反序列化必须依赖无参构造),同时确保所有需要序列化的字段都有对应的getter和setter方法,缺少这些会导致Jackson无法完成请求体的解析。验证请求格式的正确性
确认请求头中Content-Type必须设置为application/json,比如使用curl测试时需添加-H "Content-Type: application/json"参数;同时检查请求体JSON的键名与实体类字段名是否一致(默认Jackson采用驼峰命名匹配),避免因字段不匹配引发解析失败。
内容的提问来源于stack exchange,提问作者Radika Moonesinghe

