Quarkus调用Oracle存储过程返回数字串,如何适配WE8ISO8859P15编码获取XML
解决方法
你遇到的问题由两部分原因导致,按以下步骤修改即可:
1. 修复Clob读取逻辑(核心问题)
你当前的readClob方法逻辑错误:直接将读取到的字节十进制数值拼接为字符串,比如<对应的ASCII码是60,就会直接拼接"60",最终输出你看到的长数字串,这是导致问题的核心原因。
将readClob方法修改为如下实现,按WE8ISO8859P15对应的Java编码ISO-8859-15读取字节流并转为字符串:
private String readClob(Clob input) throws IOException, SQLException { // 自动关闭流避免资源泄漏 try (InputStream stream = input.getAsciiStream(); // 指定编码为ISO-8859-15 对应Oracle的WE8ISO8859P15 InputStreamReader reader = new InputStreamReader(stream, "ISO-8859-15")) { char[] buffer = new char[4096]; int readLen; StringBuilder result = new StringBuilder(); while ((readLen = reader.read(buffer)) != -1) { result.append(buffer, 0, readLen); } return result.toString(); } }
2. 配置JDBC连接适配Oracle编码
在application.properties中补充Oracle JDBC连接的编码配置,确保驱动和数据库端编码匹配:
# 原有配置保留,新增以下配置 quarkus.datasource.jdbc.connection-properties.oracle.jdbc.charset=WE8ISO8859P15 quarkus.datasource.jdbc.connection-properties.oracle.jdbc.defaultNChar=true
你项目中已经引入了orai18nOracle国际化依赖,可支持WE8ISO8859P15编码的映射转换,无需额外新增依赖。
修改完成后重新运行项目,即可直接拿到解析后的XML字符串。
内容的提问来源于stack exchange,提问作者Cas
相关产品推荐
相关产品推荐

