|
@@ -1,9 +1,9 @@
|
|
|
package com.persagy.fm.common.config;
|
|
|
|
|
|
import com.fasterxml.jackson.core.JsonGenerator;
|
|
|
-import com.fasterxml.jackson.databind.JsonSerializer;
|
|
|
-import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
-import com.fasterxml.jackson.databind.SerializerProvider;
|
|
|
+import com.fasterxml.jackson.databind.*;
|
|
|
+import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
|
|
|
+import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
|
|
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
@@ -11,21 +11,85 @@ import org.springframework.context.annotation.Primary;
|
|
|
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
|
|
|
-//@Configuration
|
|
|
+/**
|
|
|
+ * Jackson统一处理返回值
|
|
|
+ *
|
|
|
+ * @author lixing
|
|
|
+ * @version V1.0 2021/4/20 10:15 上午
|
|
|
+ */
|
|
|
+@Configuration
|
|
|
public class JacksonConfig {
|
|
|
+ @Bean
|
|
|
+ @Primary
|
|
|
+ @ConditionalOnMissingBean(ObjectMapper.class)
|
|
|
+ public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
|
|
|
+ ObjectMapper objectMapper = builder.createXmlMapper(false).build();
|
|
|
+ objectMapper.setSerializerFactory(objectMapper.getSerializerFactory()
|
|
|
+ .withSerializerModifier(new MyBeanSerializerModifier()));
|
|
|
+ return objectMapper;
|
|
|
+ }
|
|
|
|
|
|
-// @Bean
|
|
|
-// @Primary
|
|
|
-// @ConditionalOnMissingBean(ObjectMapper.class)
|
|
|
-// public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
|
|
|
-// ObjectMapper objectMapper = builder.createXmlMapper(false).build();
|
|
|
-// objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
|
|
|
-// @Override
|
|
|
-// public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
|
|
|
-// jsonGenerator.writeString("");
|
|
|
-// }
|
|
|
-// });
|
|
|
-// return objectMapper;
|
|
|
-// }
|
|
|
+ public static class MyNullArrayJsonSerializer extends JsonSerializer {
|
|
|
+ @Override
|
|
|
+ public void serialize(Object value, JsonGenerator generator, SerializerProvider provider) throws IOException {
|
|
|
+ if (value == null) {
|
|
|
+ generator.writeStartArray();
|
|
|
+ generator.writeEndArray();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static class MyNullObjJsonSerializer extends JsonSerializer {
|
|
|
+ @Override
|
|
|
+ public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
|
|
|
+ throws IOException {
|
|
|
+ jsonGenerator.writeStartObject();
|
|
|
+ jsonGenerator.writeEndObject();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static class MyBeanSerializerModifier extends BeanSerializerModifier {
|
|
|
+ // 数组,集合类型 null -> []
|
|
|
+ private JsonSerializer nullArrayJsonSerializer = new MyNullArrayJsonSerializer();
|
|
|
+ // 字符串等类型 null -> ""
|
|
|
+ private JsonSerializer nullObjJsonSerializer = new MyNullObjJsonSerializer();
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<BeanPropertyWriter> changeProperties(
|
|
|
+ SerializationConfig config, BeanDescription beanDesc,
|
|
|
+ List beanProperties) {
|
|
|
+ for (Object beanProperty : beanProperties) {
|
|
|
+ BeanPropertyWriter writer = (BeanPropertyWriter) beanProperty;
|
|
|
+ //判断字段的类型,如果是array,list,set则注册nullSerializer
|
|
|
+ if (isArrayType(writer)) {
|
|
|
+ writer.assignNullSerializer(this.nullArrayJsonSerializer);
|
|
|
+ } else if (!isBasicType(writer)){
|
|
|
+ writer.assignNullSerializer(this.nullObjJsonSerializer);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return beanProperties;
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean isArrayType(BeanPropertyWriter writer) {
|
|
|
+ Class clazz = writer.getPropertyType();
|
|
|
+ return clazz.isArray() || clazz.equals(List.class) || clazz.equals(Set.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean isBasicType(BeanPropertyWriter writer) {
|
|
|
+ Class clazz = writer.getPropertyType();
|
|
|
+ return clazz.equals(Integer.class) ||
|
|
|
+ clazz.equals(Long.class) ||
|
|
|
+ clazz.equals(Double.class) ||
|
|
|
+ clazz.equals(Float.class) ||
|
|
|
+ clazz.equals(Short.class) ||
|
|
|
+ clazz.equals(Boolean.class) ||
|
|
|
+ clazz.equals(Byte.class) ||
|
|
|
+ clazz.equals(Date.class) ||
|
|
|
+ clazz.equals(String.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|