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)
我有一个使用 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)