feat: aos-web
增加全局jackson处理器
This commit is contained in:
@@ -13,6 +13,7 @@ import java.util.function.Supplier;
|
||||
* @date: 2022/11/6
|
||||
* @description: 拷贝
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public class AosBeanUtils extends BeanUtils {
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.aos.common.model;
|
||||
|
||||
/**
|
||||
* @author: wangyl
|
||||
* @date: 2022/11/16
|
||||
* @description: 枚举基础接口
|
||||
*/
|
||||
public interface AosBaseEnum {
|
||||
/**
|
||||
* 获取枚举值
|
||||
*
|
||||
* @param
|
||||
* @return java.lang.Integer
|
||||
* @Date 2022/11/16
|
||||
* @Author wangyl
|
||||
*/
|
||||
Integer getValue();
|
||||
|
||||
/**
|
||||
* 获取枚举描述
|
||||
*
|
||||
* @param
|
||||
* @return java.lang.String
|
||||
* @Date 2022/11/16
|
||||
* @Author wangyl
|
||||
*/
|
||||
String getDesc();
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.aos.common.model.ResultCodeInterface;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@SuppressWarnings("unchecked")
|
||||
public enum WebResponse {
|
||||
/**
|
||||
*
|
||||
|
||||
@@ -12,6 +12,7 @@ import java.util.List;
|
||||
* @Function: 建立树型结构
|
||||
* @Date: 2019/9/24 14:28
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public class TreeUtil<T extends TreeNode> {
|
||||
/**
|
||||
* @Description 建立树
|
||||
|
||||
@@ -54,5 +54,17 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-autoconfigure</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.module</groupId>
|
||||
<artifactId>jackson-module-parameter-names</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||
<artifactId>jackson-datatype-jdk8</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.aos.web.conf;
|
||||
|
||||
import com.aos.web.filter.BodyRepeatReaderHttpServletFilter;
|
||||
import com.aos.web.jackson.AosJacksonBuilderCustomizer;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
@@ -33,4 +35,9 @@ public class AosWebAutoConf {
|
||||
public BodyRepeatReaderHttpServletFilter bodyRepeatReaderHttpServletFilter() {
|
||||
return new BodyRepeatReaderHttpServletFilter();
|
||||
}
|
||||
|
||||
@Bean("jackson2ObjectMapperBuilderCustomizer")
|
||||
public Jackson2ObjectMapperBuilderCustomizer customizer() {
|
||||
return new AosJacksonBuilderCustomizer();
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,32 @@
|
||||
package com.aos.web.jackson;
|
||||
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import com.aos.web.jackson.component.BigDecimalSerializer;
|
||||
import com.aos.web.jackson.component.StringSerializer;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.databind.deser.std.NumberDeserializers;
|
||||
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
|
||||
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
|
||||
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
|
||||
public class AosJacksonBuilderCustomizer implements Jackson2ObjectMapperBuilderCustomizer, Ordered {
|
||||
/**
|
||||
* Customize the JacksonObjectMapperBuilder.
|
||||
@@ -12,7 +35,39 @@ public class AosJacksonBuilderCustomizer implements Jackson2ObjectMapperBuilderC
|
||||
*/
|
||||
@Override
|
||||
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
|
||||
|
||||
jacksonObjectMapperBuilder.failOnUnknownProperties(false);
|
||||
jacksonObjectMapperBuilder.defaultUseWrapper(true);
|
||||
/**
|
||||
* 时间类型系列化/反序列化
|
||||
*/
|
||||
jacksonObjectMapperBuilder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DatePattern.NORM_DATETIME_FORMATTER));
|
||||
jacksonObjectMapperBuilder.serializerByType(LocalDate.class, new LocalDateSerializer(DatePattern.NORM_DATE_FORMATTER));
|
||||
jacksonObjectMapperBuilder.serializerByType(LocalTime.class, new LocalTimeSerializer(DatePattern.NORM_TIME_FORMATTER));
|
||||
jacksonObjectMapperBuilder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DatePattern.NORM_DATETIME_FORMATTER));
|
||||
jacksonObjectMapperBuilder.deserializerByType(LocalDate.class, new LocalDateDeserializer(DatePattern.NORM_DATE_FORMATTER));
|
||||
jacksonObjectMapperBuilder.deserializerByType(LocalTime.class, new LocalTimeDeserializer(DatePattern.NORM_TIME_FORMATTER));
|
||||
/**
|
||||
* Long类型的序列化/反序列化
|
||||
*/
|
||||
jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
|
||||
jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);
|
||||
jacksonObjectMapperBuilder.deserializerByType(Long.TYPE, new NumberDeserializers.LongDeserializer(Long.TYPE, 0L));
|
||||
jacksonObjectMapperBuilder.deserializerByType(Long.class, new NumberDeserializers.LongDeserializer(Long.class, null));
|
||||
/**
|
||||
* BigDecimal序列化去除多余0,String反序列化去除多余的空格
|
||||
*/
|
||||
jacksonObjectMapperBuilder.serializerByType(BigDecimal.class, new BigDecimalSerializer());
|
||||
jacksonObjectMapperBuilder.deserializerByType(String.class, new StringSerializer());
|
||||
/**
|
||||
* 增加java 8 新属性支持 增加自动匹配构造函数支持
|
||||
*/
|
||||
jacksonObjectMapperBuilder.modules(new JavaTimeModule(), new ParameterNamesModule(), new Jdk8Module());
|
||||
jacksonObjectMapperBuilder.featuresToEnable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN);
|
||||
jacksonObjectMapperBuilder.featuresToEnable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
|
||||
jacksonObjectMapperBuilder.featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
|
||||
jacksonObjectMapperBuilder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||
jacksonObjectMapperBuilder.featuresToDisable(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS);
|
||||
jacksonObjectMapperBuilder.annotationIntrospector(new JacksonAnnotationIntrospector());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package com.aos.web.jackson.component;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author: wangyl
|
||||
* @date: 2022/11/16
|
||||
* @description: BigDecimal修改为String, 去除多余的0
|
||||
*/
|
||||
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
|
||||
|
||||
@Override
|
||||
public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
|
||||
jsonGenerator.writeString(bigDecimal.stripTrailingZeros().toPlainString());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.aos.web.jackson.component;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.deser.std.StringDeserializer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author: wangyl
|
||||
* @date: 2022/11/16
|
||||
* @description: String去除多余的空格
|
||||
*/
|
||||
public class StringSerializer extends StringDeserializer {
|
||||
@Override
|
||||
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
||||
String value = super.deserialize(p, ctxt);
|
||||
return value == null ? null : value.trim();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user