Browse Source

update 优化 jackson 自动配置 改为使用 BeanPostProcessor 匿名处理

疯狂的狮子li 3 years ago
parent
commit
b0dbf45499

+ 27 - 13
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/jackson/config/YudaoJacksonAutoConfiguration.java

@@ -5,31 +5,45 @@ import cn.iocoder.yudao.framework.jackson.core.databind.LocalDateTimeSerializer;
 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.module.SimpleModule;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 import java.time.LocalDateTime;
 
+@Slf4j
 @Configuration
 public class YudaoJacksonAutoConfiguration {
 
     @Bean
-    @SuppressWarnings("InstantiationOfUtilityClass")
-    public JsonUtils jsonUtils(ObjectMapper objectMapper) {
-        SimpleModule simpleModule = new SimpleModule();
-        /*
-         * 1. 新增Long类型序列化规则,数值超过2^53-1,在JS会出现精度丢失问题,因此Long自动序列化为字符串类型
-         * 2. 新增LocalDateTime序列化、反序列化规则
-         */
-        simpleModule
+    public BeanPostProcessor objectMapperBeanPostProcessor() {
+        return new BeanPostProcessor() {
+            @Override
+            public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+                if (!(bean instanceof ObjectMapper)) {
+                    return bean;
+                }
+                ObjectMapper objectMapper = (ObjectMapper) bean;
+                SimpleModule simpleModule = new SimpleModule();
+                /*
+                 * 1. 新增Long类型序列化规则,数值超过2^53-1,在JS会出现精度丢失问题,因此Long自动序列化为字符串类型
+                 * 2. 新增LocalDateTime序列化、反序列化规则
+                 */
+                simpleModule
 //                .addSerializer(Long.class, ToStringSerializer.instance)
 //                    .addSerializer(Long.TYPE, ToStringSerializer.instance)
-                    .addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE)
-                    .addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE);
+                        .addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE)
+                        .addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE);
 
-        objectMapper.registerModules(simpleModule);
+                objectMapper.registerModules(simpleModule);
 
-        JsonUtils.init(objectMapper);
-        return new JsonUtils();
+                JsonUtils.init(objectMapper);
+                log.info("初始化 jackson 自动配置");
+                return bean;
+            }
+        };
     }
+
 }