Procházet zdrojové kódy

优化 json type handler 处理器

hubin před 4 roky
rodič
revize
821f02aef4

+ 11 - 4
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/GsonTypeHandler.java

@@ -32,7 +32,7 @@ import org.apache.ibatis.type.MappedTypes;
 @MappedTypes({Object.class})
 @MappedJdbcTypes(JdbcType.VARCHAR)
 public class GsonTypeHandler extends AbstractJsonTypeHandler<Object> {
-    private static Gson gson = new Gson();
+    private static Gson GSON;
     private final Class<?> type;
 
     public GsonTypeHandler(Class<?> type) {
@@ -45,16 +45,23 @@ public class GsonTypeHandler extends AbstractJsonTypeHandler<Object> {
 
     @Override
     protected Object parse(String json) {
-        return gson.fromJson(json, type);
+        return getGson().fromJson(json, type);
     }
 
     @Override
     protected String toJson(Object obj) {
-        return gson.toJson(obj);
+        return getGson().toJson(obj);
+    }
+
+    public static Gson getGson() {
+        if (null == GSON) {
+            GSON = new Gson();
+        }
+        return GSON;
     }
 
     public static void setGson(Gson gson) {
         Assert.notNull(gson, "Gson should not be null");
-        GsonTypeHandler.gson = gson;
+        GsonTypeHandler.GSON = gson;
     }
 }

+ 11 - 4
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/JacksonTypeHandler.java

@@ -35,7 +35,7 @@ import java.io.IOException;
 @MappedTypes({Object.class})
 @MappedJdbcTypes(JdbcType.VARCHAR)
 public class JacksonTypeHandler extends AbstractJsonTypeHandler<Object> {
-    private static ObjectMapper objectMapper = new ObjectMapper();
+    private static ObjectMapper OBJECT_MAPPER;
     private final Class<?> type;
 
     public JacksonTypeHandler(Class<?> type) {
@@ -49,7 +49,7 @@ public class JacksonTypeHandler extends AbstractJsonTypeHandler<Object> {
     @Override
     protected Object parse(String json) {
         try {
-            return objectMapper.readValue(json, type);
+            return getObjectMapper().readValue(json, type);
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
@@ -58,14 +58,21 @@ public class JacksonTypeHandler extends AbstractJsonTypeHandler<Object> {
     @Override
     protected String toJson(Object obj) {
         try {
-            return objectMapper.writeValueAsString(obj);
+            return getObjectMapper().writeValueAsString(obj);
         } catch (JsonProcessingException e) {
             throw new RuntimeException(e);
         }
     }
 
+    public static ObjectMapper getObjectMapper() {
+        if (null == OBJECT_MAPPER) {
+            OBJECT_MAPPER = new ObjectMapper();
+        }
+        return OBJECT_MAPPER;
+    }
+
     public static void setObjectMapper(ObjectMapper objectMapper) {
         Assert.notNull(objectMapper, "ObjectMapper should not be null");
-        JacksonTypeHandler.objectMapper = objectMapper;
+        JacksonTypeHandler.OBJECT_MAPPER = objectMapper;
     }
 }