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

main
hong.yang 1 year ago
parent 99a91dd282
commit aa46e9b502

@ -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>

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

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

@ -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>

@ -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>

Loading…
Cancel
Save