Переглянути джерело

fix:解决oracle数据库的TIMESTAMP类型数据序列化失败问题

hong.yang 1 рік тому
батько
коміт
da63bc31cd

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

@@ -7,6 +7,7 @@ import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
 import com.gccloud.dataroom.core.constant.DataRoomConst;
 import lombok.extern.slf4j.Slf4j;
 import oracle.sql.CLOB;
+import oracle.sql.TIMESTAMP;
 import org.json.JSONArray;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -41,6 +42,7 @@ public class DataRoomObjectMapperConfiguration {
         // 解决 接口响应中包含JSONObject 或 JSONArray时, 序列化失败,变成{empty: false} 的问题
         simpleModule.addSerializer(JSONArray.class, JSONArraySerializer.instance);
         simpleModule.addSerializer(CLOB.class, new OracleClobSerializer());
+        simpleModule.addSerializer(TIMESTAMP.class, new OracleTimestampSerializer());
         objectMapper.registerModule(simpleModule);
 
         log.info(DataRoomConst.Console.LINE);

+ 42 - 0
DataRoom/dataroom-core/src/main/java/com/gccloud/dataroom/core/config/OracleTimestampSerializer.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.TIMESTAMP;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import java.io.IOException;
+
+/**
+ * 解决oracle TIMESTAMP类型返回序列化问题
+ * @author hongyang
+ * @version 1.0
+ * @date 2024/05/07 10:30
+ */
+@Slf4j
+public class OracleTimestampSerializer extends JsonSerializer<TIMESTAMP> {
+
+    @Override
+    public void serialize(TIMESTAMP timestamp, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        jsonGenerator.writeString(timestampToString(timestamp));
+    }
+
+    /**
+     * timestamp字段处理
+     *
+     * @param timestamp
+     * @return
+     */
+    public static String timestampToString(TIMESTAMP timestamp) {
+        String content = "";
+        try {
+          // 转为日期格式
+            content = timestamp.stringValue();
+        } catch (Exception e) {
+            log.error(ExceptionUtils.getStackTrace(e));
+        }
+        return content;
+    }
+}