Jackson序列化oracle.sql.TIMESTAMP失败
记-jackson oracle.sql.TIMESTAMP 序列化失败
文章目录
一、错误信息
jdbc原生查询
final PreparedStatement statement = connection.prepareStatement(sql);
返回map结果,无法序列化到前端页面。
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.example.common.response.bean.Result["data"]->java.util.HashMap["data"]->java.util.ArrayList[0]->java.util.HashMap["CREATE_TIME"]->oracle.sql.TIMESTAMP["stream"])
1
二、数据预览代码
public Map<String, Object> previewData(String sql) throws SQLException {
Map<String, Object> result = new HashMap(16);
List<Map<String, Object>> list = new ArrayList<>();
try (final Connection connection = dataSource.getConnection()) {
final PreparedStatement statement = connection.prepareStatement(sql);
final ResultSetMetaData metaData = statement.getMetaData();
final int columnCount = metaData.getColumnCount();
final String[] columns = new String[columnCount];
for (int i = 0; i < columnCount; i++) {
columns[i] = metaData.getColumnLabel(i+1);
}
result.put("column", columns);
try (final ResultSet rs = statement.executeQuery()) {
int rowIndex = 0;
int limit = 10;
while (rs.next() && rowIndex < limit) {
final Map<String, Object> map = new HashMap<>(16);
for (int j = 0; j < columnCount; j++) {
final String columnLabel = columns[j];
final Object object = rs.getObject(columnLabel);
map.put(columnLabel, object);
}
list.add(map);
rowIndex++;
}
}
result.put("data", list);
} catch (SQLException e) {
LOGGER.error("SQL执行异常=>{}", e);
}
return result;
}
123456789101112131415161718192021222324252627282930313233
三、解决办法
oracle.jdbc.J2EE13Compliant设置为true(推荐)
System.setProperty("oracle.jdbc.J2EE13Compliant", "true");
评论区