Procházet zdrojové kódy

feat: 解决oracle数据源clob字段序列化异常的问题

hong.yang před 1 rokem
rodič
revize
aa46e9b502

+ 1 - 1
DataRoom/dataroom-core/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.gccloud</groupId>
         <artifactId>dataroom</artifactId>
-        <version>2.0.1.2024011701.Alpha</version>
+        <version>2.0.1.2024032201.Alpha</version>
     </parent>
 
     <artifactId>dataroom-core</artifactId>

+ 2 - 1
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/config/DataRoomObjectMapperConfiguration.java

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.datatype.jsonorg.JSONArraySerializer;
 import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
 import com.gccloud.dataroom.core.constant.DataRoomConst;
 import lombok.extern.slf4j.Slf4j;
+import oracle.sql.CLOB;
 import org.json.JSONArray;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -36,10 +37,10 @@ public class DataRoomObjectMapperConfiguration {
         // 不注册该模块会导致 @RequestBody 为 JSONObject 时属性无法填充
         JsonOrgModule jsonOrgModule = new JsonOrgModule();
         objectMapper.registerModule(jsonOrgModule);
-
         SimpleModule simpleModule = new SimpleModule();
         // 解决 接口响应中包含JSONObject 或 JSONArray时, 序列化失败,变成{empty: false} 的问题
         simpleModule.addSerializer(JSONArray.class, JSONArraySerializer.instance);
+        simpleModule.addSerializer(CLOB.class, new OracleClobSerializer());
         objectMapper.registerModule(simpleModule);
 
         log.info(DataRoomConst.Console.LINE);

+ 42 - 0
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/config/OracleClobSerializer.java

@@ -0,0 +1,42 @@
+package com.gccloud.dataroom.core.config;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import lombok.extern.slf4j.Slf4j;
+import oracle.sql.CLOB;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import java.io.IOException;
+import java.sql.Clob;
+
+/**
+ * 解决oracle CLOB类型返回序列化问题
+ * @author hongyang
+ * @version 1.0
+ * @date 2024/03/22 17:30
+ */
+@Slf4j
+public class OracleClobSerializer extends JsonSerializer<CLOB> {
+
+    @Override
+    public void serialize(CLOB clob, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        jsonGenerator.writeString(clobToString(clob));
+    }
+
+    /**
+     * Clob字段处理
+     *
+     * @param clob
+     * @return
+     */
+    public static String clobToString(Clob clob) {
+        String content = "";
+        try {
+            content = clob.getSubString(1, (int) clob.length());
+        } catch (Exception e) {
+            log.error(ExceptionUtils.getStackTrace(e));
+        }
+        return content;
+    }
+}

+ 1 - 1
DataRoom/dataroom-server/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <groupId>com.gccloud</groupId>
         <artifactId>dataroom</artifactId>
-        <version>2.0.1.2024011701.Alpha</version>
+        <version>2.0.1.2024032201.Alpha</version>
     </parent>
 
     <artifactId>dataroom-server</artifactId>

+ 1 - 1
DataRoom/pom.xml

@@ -5,7 +5,7 @@
 
     <groupId>com.gccloud</groupId>
     <artifactId>dataroom</artifactId>
-    <version>2.0.1.2024011701.Alpha</version>
+    <version>2.0.1.2024032201.Alpha</version>
 
     <packaging>pom</packaging>
     <name>dataroom</name>