【发布时间】:2020-06-08 09:41:28
【问题描述】:
我使用 JDBC 分页项阅读器,其中查询提供程序中的排序键之一(提交日期)被定义为 Oracle 表中的时间戳列。从 Spring batch 3 迁移到 4(通过 Spring Boot 5.1)后,我现在得到了这个异常:
原因: com.fasterxml.jackson.databind.exc.InvalidDefinitionException:否 为类 java.io.ByteArrayInputStream 找到序列化程序,但没有 发现创建 BeanSerializer 的属性(为了避免异常, 禁用 SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用 链: java.util.HashMap["AbstractPagingItemReader.start.after"]>java.util.LinkedHashMap[""submitteddate""]>oracle.sql.TIMESTAMP["stream"]) 在 com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) 在 com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191) 在 com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:313) 在 com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71) 在 com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serializeWithType(UnknownSerializer.java:45) 在 com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:729) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeWithType(BeanSerializerBase.java:604) 在 com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeTypedFields(MapSerializer.java:933) 在 com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:688) 在 com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithType(MapSerializer.java:666) 在 com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithType(MapSerializer.java:33) 在 com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeTypedFields(MapSerializer.java:933) 在 com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:688) 在 com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:639) 在 com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:33) 在 com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) 在 com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) 在 com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3905) 在 com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:3176) 在 org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer.serialize(Jackson2ExecutionContextStringSerializer.java:78) 在 org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer.serialize(Jackson2ExecutionContextStringSerializer.java:50) 在 org.springframework.batch.core.repository.dao.JdbcExecutionContextDao.serializeContext(JdbcExecutionContextDao.java:299) ...省略了30个常用框架
我一直在阅读有关从 xstream 到 jackson 的默认序列化程序切换的信息。我有哪些选择?我应该回到使用 xstream 序列化程序吗?我应该写一个杰克逊 oracle.sql.TIMESTAMP 序列化程序吗?后一个选项不好,因为这是 Oracle 特定的,需要我分发许可的 jar。还有什么建议吗?
【问题讨论】:
标签: jackson spring-batch