lixing 3 years ago
parent
commit
d213015c9a

+ 81 - 17
fm-common/src/main/java/com/persagy/fm/common/config/JacksonConfig.java

@@ -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);
+        }
+    }
 }

+ 1 - 1
fm-common/src/main/java/com/persagy/fm/common/config/SwaggerDisplayConfig.java

@@ -24,7 +24,7 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
- * 类说明
+ * swagger注释自动加载枚举类型
  *
  * @author lixing
  * @version V1.0 2021/4/12 10:43 上午

+ 1 - 1
fm-common/src/main/java/com/persagy/fm/common/constant/RegexConstants.java

@@ -124,7 +124,7 @@ public class RegexConstants {
     /**
      * 手机号正则表达式
      */
-    public static final String PHONE_REGEX = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$";
+    public static final String PHONE_REGEX = "^\\d{11}$";
     public static final String PHONE_OR_BLANK_REGEX = "(" +BLANK_REGEX + "|" + PHONE_REGEX + ")";
 
     /**