Spring添加CorsMapping后Jackson序列化LocalDateTime为数组的原因
问题根因
序列化异常由自定义配置类上的@EnableWebFlux注解触发,CORS配置逻辑本身没有问题:
- Spring Boot WebFlux 自动配置默认会为Jackson注册
JavaTimeModule时间处理模块,同时关闭WRITE_DATES_AS_TIMESTAMPS序列化配置,因此LocalDateTime类型默认序列化为ISO-8601标准格式字符串,对应最初的正常响应结果。 - 在配置类上添加
@EnableWebFlux注解后,Spring Boot会直接禁用WebFlux相关的全部自动配置,交由开发者手动接管WebFlux全量配置。自动配置中预置的Jackson时间序列化定制规则会同步失效,Jackson回退到原生默认序列化逻辑。 - Jackson默认处理
LocalDateTime类型时,会将其内部存储的年、月、日、时、分、秒、纳秒属性逐一拆解序列化,最终输出观测到的数值数组结构。
修复方案
移除WebConfig类上的@EnableWebFlux注解即可恢复正常。
自定义WebFlux配置(包括CORS映射、拦截器、参数格式化器等)时,仅需编写实现
WebFluxConfigurer接口的@Configuration类即可,无需额外添加@EnableWebFlux注解。该注解仅在需要完全手动管控WebFlux所有基础组件、完全弃用Spring Boot WebFlux自动装配能力的场景下使用。
内容的提问来源于stack exchange,提问作者DGrinbergs
相关产品推荐
相关产品推荐

