Преглед на файлове

增加json序列化字符串null值安全处理逻辑

woody преди 9 месеца
родител
ревизия
e61c68e8f1
променени са 1 файла, в които са добавени 18 реда и са изтрити 1 реда
  1. 18 1
      framework-common/src/main/java/com/chelvc/framework/common/util/JacksonUtils.java

+ 18 - 1
framework-common/src/main/java/com/chelvc/framework/common/util/JacksonUtils.java

@@ -370,6 +370,21 @@ public final class JacksonUtils {
      */
     private static BeanSerializerModifier generateNullModifier() {
         return new BeanSerializerModifier() {
+            /**
+             * 空字符串序列化处理
+             */
+            private final JsonSerializer<Object> stringSerializer = new JsonSerializer<Object>() {
+                @Override
+                public void serialize(Object value, JsonGenerator generator, SerializerProvider provider)
+                        throws IOException {
+                    if (value == null) {
+                        generator.writeString(StringUtils.EMPTY);
+                    } else {
+                        generator.writeObject(value);
+                    }
+                }
+            };
+
             /**
              * 空字典序列化处理器
              */
@@ -407,7 +422,9 @@ public final class JacksonUtils {
                                                              List<BeanPropertyWriter> writers) {
                 writers.forEach(writer -> {
                     Class<?> clazz = writer.getType().getRawClass();
-                    if (Map.class.isAssignableFrom(clazz)) {
+                    if (CharSequence.class.isAssignableFrom(clazz)) {
+                        writer.assignNullSerializer(this.stringSerializer);
+                    } else if (Map.class.isAssignableFrom(clazz)) {
                         writer.assignNullSerializer(this.mappingSerializer);
                     } else if (clazz.isArray() || Collection.class.isAssignableFrom(clazz)) {
                         writer.assignNullSerializer(this.collectionSerializer);