From bdeba4ce3d95f72987194ae22c750b7f50048fe5 Mon Sep 17 00:00:00 2001 From: PIGCLOUD Date: Thu, 18 Jun 2026 22:32:55 +0800 Subject: [PATCH] fix(core): avoid replacing projecting jackson converter --- .../common/core/config/JacksonConfiguration.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfiguration.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfiguration.java index cd9b6f222..a596a8ba2 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfiguration.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/config/JacksonConfiguration.java @@ -82,6 +82,7 @@ public class JacksonConfiguration implements WebMvcConfigurer { *
  • yyyy-MM-dd -> LocalDate
  • *
  • yyyy-MM-dd HH:mm:ss -> LocalDateTime
  • * + * * @param registry */ @Override @@ -95,6 +96,7 @@ public class JacksonConfiguration implements WebMvcConfigurer { /** * 避免form 提交 context-type 不规范中文乱码 + * * @return Filter */ @Bean @@ -119,14 +121,19 @@ public class JacksonConfiguration implements WebMvcConfigurer { * 替换策略:用 {@link ListIterator#set} 原地替换 Jackson 3 converter;找不到时把 Jackson 2 * converter 插到队首作为 fallback。不做 clear,以免破坏 byte[]、String、multipart * 等其它默认 converter。 + * * @param converters 消息转换器列表 */ @Override public void extendMessageConverters(List> converters) { ObjectMapper objectMapper = objectMapperProvider.getIfAvailable(); if (objectMapper == null) { - log.warn("ObjectMapper 不可用,跳过 Spring MVC Jackson 2 替换;保留 Spring Boot 默认 converter 链。"); - return; + // 本类存在的唯一目的就是把 MVC 链路桥接回 Jackson 2,拿不到 Jackson 2 ObjectMapper + // 说明 jackson2 autoconfigure 未生效,属于环境配置错误。若静默降级到 Jackson 3, + // pigx-common-xss 的反序列化 XSS 清洗、Long->String、时间格式都会失效且难以察觉, + // 因此在启动期 fail-fast 暴露,而不是带病运行。 + throw new IllegalStateException("Jackson 2 ObjectMapper 不可用,无法将 Spring MVC 桥接到 Jackson 2;" + + "请检查 jackson2 autoconfigure 是否生效(XSS 清洗、Long 字符串化、时间格式均依赖于此)。"); } org.springframework.http.converter.json.MappingJackson2HttpMessageConverter jackson2Converter = @@ -134,9 +141,10 @@ public class JacksonConfiguration implements WebMvcConfigurer { ListIterator> it = converters.listIterator(); boolean replaced = false; while (it.hasNext()) { - if (it.next() instanceof JacksonJsonHttpMessageConverter) { + if (it.next().getClass() == JacksonJsonHttpMessageConverter.class) { it.set(jackson2Converter); replaced = true; + break; } } if (!replaced) {