update 更新 jackson 配置 支持 LocalDateTime 全局格式化

This commit is contained in:
疯狂的狮子li 2021-09-07 13:18:36 +08:00
parent 38f03855eb
commit c5d46591fe
2 changed files with 25 additions and 38 deletions

View File

@ -4,6 +4,9 @@ import cn.hutool.core.util.ArrayUtil;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -15,20 +18,10 @@ import java.util.Map;
* *
* @author 芋道源码 * @author 芋道源码
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class JsonUtils { public class JsonUtils {
private static ObjectMapper objectMapper = new ObjectMapper(); private static ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class);
/**
* 初始化 objectMapper 属性
* <p>
* 通过这样的方式使用 Spring 创建的 ObjectMapper Bean
*
* @param objectMapper ObjectMapper 对象
*/
public static void init(ObjectMapper objectMapper) {
JsonUtils.objectMapper = objectMapper;
}
public static String toJsonString(Object object) { public static String toJsonString(Object object) {
if (StringUtils.isNull(object)) { if (StringUtils.isNull(object)) {

View File

@ -5,17 +5,18 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.framework.jackson.BigNumberSerializer; import com.ruoyi.framework.jackson.BigNumberSerializer;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException; import org.springframework.boot.autoconfigure.jackson.JacksonProperties;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone; import java.util.TimeZone;
/** /**
@ -27,30 +28,23 @@ import java.util.TimeZone;
@Configuration @Configuration
public class JacksonConfig { public class JacksonConfig {
@Primary
@Bean @Bean
public BeanPostProcessor objectMapperBeanPostProcessor() { public ObjectMapper getObjectMapper(Jackson2ObjectMapperBuilder builder, JacksonProperties jacksonProperties) {
return new BeanPostProcessor() { ObjectMapper objectMapper = builder.createXmlMapper(false).build();
@Override // 全局配置序列化返回 JSON 处理
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { SimpleModule simpleModule = new SimpleModule();
if (!(bean instanceof ObjectMapper)) { simpleModule.addSerializer(Long.class, BigNumberSerializer.INSTANCE);
return bean; simpleModule.addSerializer(Long.TYPE, BigNumberSerializer.INSTANCE);
} simpleModule.addSerializer(BigInteger.class, BigNumberSerializer.INSTANCE);
ObjectMapper objectMapper = (ObjectMapper) bean; simpleModule.addSerializer(BigDecimal.class, ToStringSerializer.instance);
// 全局配置序列化返回 JSON 处理 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(jacksonProperties.getDateFormat());
SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter));
simpleModule.addSerializer(Long.class, BigNumberSerializer.INSTANCE); simpleModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter));
simpleModule.addSerializer(Long.TYPE, BigNumberSerializer.INSTANCE); objectMapper.registerModule(simpleModule);
simpleModule.addSerializer(BigInteger.class, BigNumberSerializer.INSTANCE); objectMapper.setTimeZone(TimeZone.getDefault());
simpleModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); log.info("初始化 jackson 配置");
simpleModule.addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE); return objectMapper;
simpleModule.addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE);
objectMapper.registerModule(simpleModule);
objectMapper.setTimeZone(TimeZone.getDefault());
JsonUtils.init(objectMapper);
log.info("初始化 jackson 配置");
return bean;
}
};
} }
} }