我正在尝试使用 Jackson 在 Camel 路由上将 POJO 与 JSON 进行序列化和反序列化。其中一些具有 Java 8 LocalDate 字段,我希望将它们序列化为 YYYY-MM-DD 字符串,而不是整数数组。
我们的 Spring Boot 应用程序仅使用 Java 配置,因此没有 XML Camel 配置。
我已经成功创建了一个 ObjectMapper 来执行我想要的操作,通过将其添加到我们的依赖项中,我们系统的其他部分正在使用它:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
这是我们的应用程序配置:
@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
return builder
.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.build();
}
传出 REST 路由示例:
@Component
public class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
restConfiguration().component("servlet").contextPath("/mycontext")
.port(8080).bindingMode(RestBindingMode.json);
rest("/myendpoint)
.get()
.route()
.to("bean:myService?method=myMethod()");
}
}
传入消息路由示例:
@Component
public class MyRouteBuilder extends RouteBuilder {
@Autowired
private MyBean myBean;
@Override
public void configure() {
from(uri)
.unmarshal().json(JsonLibrary.Jackson)
.bean(myBean);
}
}
然而,默认情况下,Camel 创建自己的 ObjectMapper 实例,因此不会选择 JSR310 序列化器/反序列化器Jackson2ObjectMapperBuilder
自动添加,或禁用WRITE_DATES_AS_TIMESTAMPS
特征。我已阅读骆驼 JSON http://camel.apache.org/json.html文档,但它没有显示如何使用 Spring 配置添加自定义 DataFormat,或如何为所有类型应用全局自定义。
那么我如何告诉 Camel 使用我的 ObjectMapper,仅使用 Spring Boot Java 配置呢?