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) {