如何解决Camel Quarkus 似乎没有使用 Quarkus objectmapper
我有一个 Camel ReST 路由,它使用 Jackson 将集合转换为 JSON,但是当集合中的对象包含 LocalDate 时它会抛出错误(没有 LocalDates 一切正常)。
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:默认不支持 Java 8 日期/时间类型 java.time.LocalDate
:添加模块“com.fasterxml.jackson.datatype:jackson-datatype-jsr310 “
我添加了一个类来自定义 Quarkus ObjectMapper:
@Singleton
class MyObjectMapperCustomizer : ObjectMapperCustomizer {
override fun customize(objectMapper: ObjectMapper) {
objectMapper.registerModule(JavaTimeModule())
}
}
但看起来 Camel 没有使用这个 ObjectMapper,我可以在 VisualVM 中看到 ObjectMapper 类有 3 个实例。
抛出异常的 Camel rest 端点是:
.get().produces(MediaType.APPLICATION_JSON).route()
.bean(svc.getAllTradeList()).marshal().json(JsonLibrary.Jackson).endRest()
svc.getAllTradeList 只是将交易主体设置为 Trade 对象列表,而 Trade 对象本身非常基本:
@RegisterForReflection
data class Trade(
val id: String,val description: String,val notional: Double,val tradeDate: LocalDate
)
我看不到让 Camel 使用我正在自定义的 Quarkus ObjectMapper 或自定义 Camel 似乎正在创建的对象的明显方法。
任何指针将不胜感激。
解决方法
如果对象映射器有多个实例,那么camel不知道该选择哪个,所以要使用它,你必须明确配置camel应该使用什么:
如果命名了来自 quarkus 的对象映射器,您可以执行以下操作:
.marshal()
.json()
.libray(JsonLibrary.Jackson)
.objectMapper("name-of-the-object-mapper")
如果没有,你可以创建一个 JacksonDataFormat 的实例并配置它:
JacksonDataFormat df = new JacksonDataFormat();
df.setObjectMapper(mapper) // use CDI to get a referece
然后直接使用:
.marshal(mapper)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。