小编Dav*_*rds的帖子

如何在Spring Boot中为Camel配置Jackson ObjectMapper

我正在尝试使用Jackson在Camel路由上与JSON序列化和反序列化POJO.其中一些有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>
Run Code Online (Sandbox Code Playgroud)

这对我们的应用程序配置:

@Bean
public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
    return builder
            .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

示例传出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()");
    }
}
Run Code Online (Sandbox Code Playgroud)

传入消息路由示例:

@Component
public class MyRouteBuilder extends RouteBuilder {

    @Autowired
    private MyBean myBean;

    @Override
    public void configure() {
        from(uri)
                .unmarshal().json(JsonLibrary.Jackson)
                .bean(myBean);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,默认情况下,Camel会创建自己的ObjectMapper实例,因此不会选择Jackson2ObjectMapperBuilder自动添加的JSR310序列化程序/反序列化程序或禁用的WRITE_DATES_AS_TIMESTAMPS功能.我已经阅读了Camel JSON文档,但它没有说明如何使用Spring配置添加自定义DataFormat,或者如何为所有类型应用全局自定义.

那么如何使用Spring Boot Java配置告诉Camel使用我的ObjectMapper?

apache-camel jackson spring-boot

15
推荐指数
3
解决办法
1万
查看次数

标签 统计

apache-camel ×1

jackson ×1

spring-boot ×1