diff --git a/healthlink-his-server/core-common/pom.xml b/healthlink-his-server/core-common/pom.xml
index be1167d9b..c6305a053 100755
--- a/healthlink-his-server/core-common/pom.xml
+++ b/healthlink-his-server/core-common/pom.xml
@@ -110,9 +110,9 @@
-
+
- com.fasterxml.jackson.core
+ tools.jackson.core
jackson-databind
diff --git a/healthlink-his-server/core-common/src/main/java/com/core/common/annotation/Sensitive.java b/healthlink-his-server/core-common/src/main/java/com/core/common/annotation/Sensitive.java
index 731a994a0..800a7aec2 100755
--- a/healthlink-his-server/core-common/src/main/java/com/core/common/annotation/Sensitive.java
+++ b/healthlink-his-server/core-common/src/main/java/com/core/common/annotation/Sensitive.java
@@ -3,7 +3,7 @@ package com.core.common.annotation;
import com.core.common.config.serializer.SensitiveJsonSerializer;
import com.core.common.enums.DesensitizedType;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import tools.jackson.databind.annotation.JsonSerialize;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/healthlink-his-server/core-common/src/main/java/com/core/common/config/serializer/SensitiveJsonSerializer.java b/healthlink-his-server/core-common/src/main/java/com/core/common/config/serializer/SensitiveJsonSerializer.java
index 2b4752513..9cec522cf 100755
--- a/healthlink-his-server/core-common/src/main/java/com/core/common/config/serializer/SensitiveJsonSerializer.java
+++ b/healthlink-his-server/core-common/src/main/java/com/core/common/config/serializer/SensitiveJsonSerializer.java
@@ -4,14 +4,13 @@ import com.core.common.annotation.Sensitive;
import com.core.common.core.domain.model.LoginUser;
import com.core.common.enums.DesensitizedType;
import com.core.common.utils.SecurityUtils;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.BeanProperty;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.ser.ContextualSerializer;
+import tools.jackson.core.JacksonException;
+import tools.jackson.core.JsonGenerator;
+import tools.jackson.databind.BeanProperty;
+import tools.jackson.databind.DatabindException;
+import tools.jackson.databind.ValueSerializer;
+import tools.jackson.databind.SerializationContext;
-import java.io.IOException;
import java.util.Objects;
/**
@@ -19,11 +18,11 @@ import java.util.Objects;
*
* @author system
*/
-public class SensitiveJsonSerializer extends JsonSerializer implements ContextualSerializer {
+public class SensitiveJsonSerializer extends ValueSerializer {
private DesensitizedType desensitizedType;
@Override
- public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+ public void serialize(String value, JsonGenerator gen, SerializationContext serializers) throws JacksonException {
if (desensitization()) {
gen.writeString(desensitizedType.desensitizer().apply(value));
} else {
@@ -32,14 +31,14 @@ public class SensitiveJsonSerializer extends JsonSerializer implements C
}
@Override
- public JsonSerializer> createContextual(SerializerProvider prov, BeanProperty property)
- throws JsonMappingException {
+ public ValueSerializer> createContextual(SerializationContext prov, BeanProperty property)
+ throws DatabindException {
Sensitive annotation = property.getAnnotation(Sensitive.class);
if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) {
this.desensitizedType = annotation.desensitizedType();
return this;
}
- return prov.findValueSerializer(property.getType(), property);
+ return prov.findPrimaryPropertySerializer(property.getType(), property);
}
/**
diff --git a/healthlink-his-server/core-common/src/main/java/com/core/common/core/domain/entity/SysUser.java b/healthlink-his-server/core-common/src/main/java/com/core/common/core/domain/entity/SysUser.java
index 8bf54358d..a17a87e8c 100755
--- a/healthlink-his-server/core-common/src/main/java/com/core/common/core/domain/entity/SysUser.java
+++ b/healthlink-his-server/core-common/src/main/java/com/core/common/core/domain/entity/SysUser.java
@@ -9,8 +9,8 @@ import com.core.common.annotation.Excel.Type;
import com.core.common.annotation.Excels;
import com.core.common.core.domain.BaseEntity;
import com.core.common.xss.Xss;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import tools.jackson.databind.annotation.JsonSerialize;
+import tools.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
diff --git a/healthlink-his-server/core-common/src/main/java/com/core/common/filter/PropertyPreExcludeFilter.java b/healthlink-his-server/core-common/src/main/java/com/core/common/filter/PropertyPreExcludeFilter.java
index 78892a9a6..2bc79b6a1 100755
--- a/healthlink-his-server/core-common/src/main/java/com/core/common/filter/PropertyPreExcludeFilter.java
+++ b/healthlink-his-server/core-common/src/main/java/com/core/common/filter/PropertyPreExcludeFilter.java
@@ -1,9 +1,9 @@
package com.core.common.filter;
import com.fasterxml.jackson.annotation.JsonFilter;
-import com.fasterxml.jackson.databind.ser.FilterProvider;
-import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
-import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
+import tools.jackson.databind.ser.FilterProvider;
+import tools.jackson.databind.ser.std.SimpleBeanPropertyFilter;
+import tools.jackson.databind.ser.std.SimpleFilterProvider;
import org.apache.commons.lang3.ArrayUtils;
import java.util.HashSet;
diff --git a/healthlink-his-server/core-common/src/main/java/com/core/common/utils/DictUtils.java b/healthlink-his-server/core-common/src/main/java/com/core/common/utils/DictUtils.java
index f465571fc..46da42293 100755
--- a/healthlink-his-server/core-common/src/main/java/com/core/common/utils/DictUtils.java
+++ b/healthlink-his-server/core-common/src/main/java/com/core/common/utils/DictUtils.java
@@ -1,7 +1,7 @@
package com.core.common.utils;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.core.type.TypeReference;
+import tools.jackson.databind.ObjectMapper;
import com.core.common.constant.CacheConstants;
import com.core.common.core.domain.entity.SysDictData;
import com.core.common.core.redis.RedisCache;
diff --git a/healthlink-his-server/core-common/src/main/java/com/core/common/utils/JsonUtils.java b/healthlink-his-server/core-common/src/main/java/com/core/common/utils/JsonUtils.java
index 98b743f4d..4ab905466 100644
--- a/healthlink-his-server/core-common/src/main/java/com/core/common/utils/JsonUtils.java
+++ b/healthlink-his-server/core-common/src/main/java/com/core/common/utils/JsonUtils.java
@@ -1,11 +1,12 @@
package com.core.common.utils;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
+import tools.jackson.core.JacksonException;
+import tools.jackson.core.type.TypeReference;
+import tools.jackson.databind.DeserializationFeature;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.SerializationFeature;
+import tools.jackson.databind.json.JsonMapper;
/**
* Jackson JSON 工具类
@@ -13,12 +14,10 @@ import com.fasterxml.jackson.databind.SerializationFeature;
* @author system
*/
public class JsonUtils {
- private static final ObjectMapper MAPPER = new ObjectMapper();
-
- static {
- MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
- }
+ private static final ObjectMapper MAPPER = JsonMapper.builder()
+ .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
+ .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
+ .build();
public static ObjectMapper getMapper() {
return MAPPER;
@@ -27,7 +26,7 @@ public class JsonUtils {
public static String toJson(Object obj) {
try {
return MAPPER.writeValueAsString(obj);
- } catch (JsonProcessingException e) {
+ } catch (JacksonException e) {
return "{}";
}
}
diff --git a/healthlink-his-server/core-common/src/main/java/com/core/common/utils/ip/AddressUtils.java b/healthlink-his-server/core-common/src/main/java/com/core/common/utils/ip/AddressUtils.java
index 629251b72..80e278aff 100755
--- a/healthlink-his-server/core-common/src/main/java/com/core/common/utils/ip/AddressUtils.java
+++ b/healthlink-his-server/core-common/src/main/java/com/core/common/utils/ip/AddressUtils.java
@@ -1,8 +1,8 @@
package com.core.common.utils.ip;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
-import com.fasterxml.jackson.databind.JsonNode;
+import tools.jackson.databind.JsonNode;
import com.core.common.config.CoreConfig;
import com.core.common.constant.Constants;
import com.core.common.utils.StringUtils;
diff --git a/healthlink-his-server/core-flowable/pom.xml b/healthlink-his-server/core-flowable/pom.xml
index 72b8fc34b..e60cb2f02 100755
--- a/healthlink-his-server/core-flowable/pom.xml
+++ b/healthlink-his-server/core-flowable/pom.xml
@@ -34,7 +34,7 @@
- com.fasterxml.jackson.core
+ tools.jackson.core
jackson-databind
diff --git a/healthlink-his-server/core-flowable/src/main/java/com/core/flowable/service/impl/FlowTaskServiceImpl.java b/healthlink-his-server/core-flowable/src/main/java/com/core/flowable/service/impl/FlowTaskServiceImpl.java
index 732fa90e1..a5408ac95 100755
--- a/healthlink-his-server/core-flowable/src/main/java/com/core/flowable/service/impl/FlowTaskServiceImpl.java
+++ b/healthlink-his-server/core-flowable/src/main/java/com/core/flowable/service/impl/FlowTaskServiceImpl.java
@@ -1,11 +1,11 @@
package com.core.flowable.service.impl;
import com.core.common.utils.JsonUtils;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.core.type.TypeReference;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.node.ObjectNode;
+import tools.jackson.databind.node.ArrayNode;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.core.type.TypeReference;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.core.domain.AjaxResult;
import com.core.common.core.domain.entity.SysRole;
diff --git a/healthlink-his-server/core-framework/src/main/java/com/core/framework/aspectj/LogAspect.java b/healthlink-his-server/core-framework/src/main/java/com/core/framework/aspectj/LogAspect.java
index fbd7212c8..61ca2a475 100755
--- a/healthlink-his-server/core-framework/src/main/java/com/core/framework/aspectj/LogAspect.java
+++ b/healthlink-his-server/core-framework/src/main/java/com/core/framework/aspectj/LogAspect.java
@@ -1,6 +1,6 @@
package com.core.framework.aspectj;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.databind.ObjectMapper;
import com.core.common.utils.JsonUtils;
import com.core.common.annotation.Log;
import com.core.common.core.domain.entity.SysUser;
diff --git a/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/ApplicationConfig.java b/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/ApplicationConfig.java
index 0feca87a8..1f0709d21 100755
--- a/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/ApplicationConfig.java
+++ b/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/ApplicationConfig.java
@@ -1,51 +1,64 @@
package com.core.framework.config;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.jackson2.autoconfigure.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.boot.jackson.autoconfigure.JsonMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import tools.jackson.core.JacksonException;
+import tools.jackson.core.JsonParser;
+import tools.jackson.core.JsonGenerator;
+import tools.jackson.databind.DeserializationContext;
+import tools.jackson.databind.SerializationContext;
+import tools.jackson.databind.ValueDeserializer;
+import tools.jackson.databind.ValueSerializer;
+import tools.jackson.databind.module.SimpleModule;
-import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import java.util.TimeZone;
@Configuration
@EnableAspectJAutoProxy(exposeProxy = true)
@MapperScan({"com.core.**.mapper", "com.healthlink.his.**.mapper"})
public class ApplicationConfig {
- private static final JsonDeserializer LOCAL_DATE_TIME_DESERIALIZER = new JsonDeserializer<>() {
- private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
- private static final DateTimeFormatter SIMPLE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- private static final DateTimeFormatter SLASH_FORMATTER = DateTimeFormatter.ofPattern("yyyy/M/d HH:mm:ss");
+ private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ private static final DateTimeFormatter ISO_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
+ private static final DateTimeFormatter SLASH_FORMATTER = DateTimeFormatter.ofPattern("yyyy/M/d HH:mm:ss");
- @Override
- public LocalDateTime deserialize(JsonParser p, DeserializationContext context) throws IOException {
- String text = p.getText();
- if (text == null || text.isEmpty()) return null;
- String cleaned = text.replaceAll("[Zz]$", "").replaceAll("[+-]\\d{2}:?\\d{2}$", "");
- try { return LocalDateTime.parse(cleaned, ISO_FORMATTER); } catch (Exception ignored) {}
- try { return LocalDateTime.parse(cleaned, SIMPLE_FORMATTER); } catch (Exception ignored) {}
- return LocalDateTime.parse(cleaned, SLASH_FORMATTER);
- }
- };
+ private static final ValueDeserializer LOCAL_DATE_TIME_DESERIALIZER =
+ new ValueDeserializer() {
+ @Override
+ public LocalDateTime deserialize(JsonParser p, DeserializationContext context) throws JacksonException {
+ String text = p.getText();
+ if (text == null || text.isEmpty()) return null;
+ String cleaned = text.replaceAll("[Zz]$", "").replaceAll("[+-]\\d{2}:?\\d{2}$", "");
+ try { return LocalDateTime.parse(cleaned, ISO_FORMATTER); } catch (Exception ignored) {}
+ try { return LocalDateTime.parse(cleaned, FORMATTER); } catch (Exception ignored) {}
+ return LocalDateTime.parse(cleaned, SLASH_FORMATTER);
+ }
+ };
+
+ private static final ValueSerializer LOCAL_DATE_TIME_SERIALIZER =
+ new ValueSerializer() {
+ @Override
+ public void serialize(LocalDateTime value, JsonGenerator gen, SerializationContext ctx) throws JacksonException {
+ gen.writeString(value.format(FORMATTER));
+ }
+
+ @Override
+ public Class handledType() {
+ return LocalDateTime.class;
+ }
+ };
@Bean
- public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
+ public JsonMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return builder -> {
- builder.timeZone(TimeZone.getDefault());
- builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
- JavaTimeModule javaTimeModule = new JavaTimeModule();
- javaTimeModule.addDeserializer(LocalDateTime.class, LOCAL_DATE_TIME_DESERIALIZER);
- builder.modules(javaTimeModule);
- builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+ SimpleModule module = new SimpleModule("HealthLinkLocalDateTime");
+ module.addDeserializer(LocalDateTime.class, LOCAL_DATE_TIME_DESERIALIZER);
+ module.addSerializer(LocalDateTime.class, LOCAL_DATE_TIME_SERIALIZER);
+ builder.addModule(module);
};
}
}
diff --git a/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/FastJson2JsonRedisSerializer.java b/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/FastJson2JsonRedisSerializer.java
index 6bc8e182a..9f70653cf 100755
--- a/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/FastJson2JsonRedisSerializer.java
+++ b/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/FastJson2JsonRedisSerializer.java
@@ -1,7 +1,10 @@
package com.core.framework.config;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import tools.jackson.databind.DefaultTyping;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
+import tools.jackson.databind.jsontype.PolymorphicTypeValidator;
+import tools.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import org.slf4j.Logger;
@@ -10,16 +13,17 @@ import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
/**
- * Redis序列化器 - 兼容fastjson2旧格式
+ * Redis序列化器 - 兼容fastjson2旧格式(Jackson 3 迁移版)
*
* @author system
*/
public class FastJson2JsonRedisSerializer implements RedisSerializer {
private static final Logger log = LoggerFactory.getLogger(FastJson2JsonRedisSerializer.class);
- public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
+ public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
/** 新格式: 带类型信息 (activateDefaultTyping) */
private final ObjectMapper typedMapper;
@@ -31,16 +35,21 @@ public class FastJson2JsonRedisSerializer implements RedisSerializer {
super();
this.clazz = clazz;
+ // Jackson 3: 用 BasicPolymorphicTypeValidator 替代 LaissezFaireSubTypeValidator
+ PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
+ .allowIfBaseType(Object.class)
+ .build();
+
// 新格式 ObjectMapper (带类型信息)
- this.typedMapper = new ObjectMapper();
- this.typedMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
- this.typedMapper.activateDefaultTyping(
- LaissezFaireSubTypeValidator.instance,
- ObjectMapper.DefaultTyping.NON_FINAL);
+ this.typedMapper = JsonMapper.builder()
+ .changeDefaultVisibility(vc -> vc.withVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY))
+ .activateDefaultTyping(ptv, DefaultTyping.NON_FINAL)
+ .build();
// 旧格式 ObjectMapper (不带类型信息)
- this.plainMapper = new ObjectMapper();
- this.plainMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+ this.plainMapper = JsonMapper.builder()
+ .changeDefaultVisibility(vc -> vc.withVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY))
+ .build();
}
@Override
@@ -75,4 +84,4 @@ public class FastJson2JsonRedisSerializer implements RedisSerializer {
return null;
}
}
-}
\ No newline at end of file
+}
diff --git a/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/FastjsonCompatibleRedisSerializer.java b/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/FastjsonCompatibleRedisSerializer.java
index 6d39a8c62..1f7a09d0f 100644
--- a/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/FastjsonCompatibleRedisSerializer.java
+++ b/healthlink-his-server/core-framework/src/main/java/com/core/framework/config/FastjsonCompatibleRedisSerializer.java
@@ -2,8 +2,10 @@ package com.core.framework.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.databind.DeserializationFeature;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.json.JsonMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.serializer.RedisSerializer;
@@ -12,7 +14,7 @@ import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.StandardCharsets;
/**
- * Jackson Redis序列化器 - 兼容fastjson旧格式
+ * Jackson Redis序列化器 - 兼容fastjson旧格式(Jackson 3 迁移版)
*
* 新数据: 纯JSON (无类型包装),调用方用 convertValue 转换
* 旧fastjson: 去除L后缀后按JSON解析
@@ -30,10 +32,10 @@ public class FastjsonCompatibleRedisSerializer implements RedisSerializer