update 更新 jackson 配置 支持 LocalDateTime 全局格式化
This commit is contained in:
parent
38f03855eb
commit
c5d46591fe
@ -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)) {
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user