Camel Quarkus 似乎没有使用 Quarkus objectmapper

Camel Quarkus does not seem to be using the Quarkus objectmapper

我有一个使用 Jackson 将集合转换为 JSON 的 Camel ReST 路由,但是当集合中的对象包含 LocalDate(没有 LocalDates 一切正常)时它会抛出错误。

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type 默认不支持 java.time.LocalDate: 添加 Module "com.fasterxml.jackson.datatype:jackson-datatype -jsr310

我添加了一个 class 来自定义 Quarkus ObjectMapper:


    @Singleton
    class MyObjectMapperCustomizer : ObjectMapperCustomizer {
        override fun customize(objectMapper: ObjectMapper) {
            objectMapper.registerModule(JavaTimeModule())
        }
    }

但看起来 Camel 没有使用这个 ObjectMapper,我可以在 VisualVM 中看到有 3 个 ObjectMapper 实例 class。

抛出异常的 Camel rest 端点是:

     .get().produces(MediaType.APPLICATION_JSON).route()
     .bean(svc.getAllTradeList()).marshal().json(JsonLibrary.Jackson).endRest()

svc.getAllTradeList 只是将交换主体设置为贸易对象列表,而贸易对象本身非常基础:

    @RegisterForReflection
    data class Trade(
        val id: String,
        val description: String,
        val notional: Double,
        val tradeDate: LocalDate
    )

我看不到让 Camel 使用我正在自定义的 Quarkus ObjectMapper 或自定义 Camel 似乎正在创建的 Quarkus ObjectMapper 的明显方法。

任何指点将不胜感激。

如果对象映射器有多个实例,那么 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)