我正在尝试使用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序列化/反序列化器,也不会使用禁用的WRITE_DATES_AS_TIMESTAMPS功能,这些是由Jackson2ObjectMapperBuilder自动添加的。我已经阅读了Camel JSON文档,但它没有展示如何使用Spring配置添加自定义DataFormat,或者如何对所有类型应用全局自定义。
那么,我该如何只使用Spring Boot Java配置告诉Camel使用我的ObjectMapper呢?