【问题标题】:Spring Batch Oracle TIMESTAMP Jackson serialization failureSpring Batch Oracle TIMESTAMP Jackson 序列化失败
【发布时间】: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


    【解决方案1】:

    我选择了here 提供的解决方案,因为 oracle.sql.TIMESTAMP 没有公开任何公共 getter/setter。由于 Jackson2 序列化程序未在 4.1 中打开配置,因此不得不将 Spring Batch 升级到 4.2 to

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2016-01-11
      相关资源
      最近更新 更多