当前位置: 首页 > 知识库问答 >
问题:

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

贾建茗
2023-03-14

我正在尝试使用Jackson在骆驼路由上序列化POJO和反序列化POJO到JSON和从JSON到JSON。其中一些有Java8 LocalDate字段,我希望它们序列化为YYYY-MM-DD字符串,而不是整数数组。

我们只对Spring Boot应用程序使用Java配置,因此没有XML骆驼配置。

我已经成功地创建了一个ObjectMapper来执行我想要的操作,通过将此添加到我们的依赖项中,我们系统的其他部分正在使用该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();
}
@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实例,因此不使用jackson2objectMapperBuilder自动添加的JSR310序列化器/反序列化器,也不使用禁用的write_dates_as_timestamps特性。我读过Camel JSON文档,但它没有展示如何使用Spring配置添加自定义数据格式,或者如何为所有类型应用全局自定义。

那么,我如何告诉Camel使用我的ObjectMapper,只使用Spring BootJava配置呢?

共有1个答案

宰烈
2023-03-14

我已经找到了一个解决方案,通过逐步通过骆驼代码。因此,虽然它做了我想要的,但它可能无法与Camel的未来版本一起工作,因为它似乎没有文档,而且可能不受支持。

除了问题中的objectmapperbean之外,我所做的只是将以下bean添加到Spring配置中:

@Bean(name = "json-jackson")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public JacksonDataFormat jacksonDataFormat(ObjectMapper objectMapper) {
    return new JacksonDataFormat(objectMapper, HashMap.class);
}

需要注意的关键要点:

    null
 类似资料:
  • 我在学习Spring Boot时遇到了一些编码问题;我想添加一个像Spring3.x那样的CharacterEncodingFilter。就像这样:

  • 我知道在DispatcherServlet之外使用请求范围bean需要一些配置,并且已经阅读了http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-oth,但是还没有成功: 对于Servlet3.0+,这可以通过WebApplicationIni

  • 我试图用1.5.15.release版本在Spring Boot项目中配置LettuceConnectionFactory。

  • 我想避免对象达到的最大对象图大小:840-错误。按照这个 此元素具有以下属性:maxDepth–控制在引擎大小采取任何操作之前可以访问多少链接对象。此属性是必需的。MaxDepthexceedBehavior–指定在调整对象图大小时超过最大深度时发生的情况: 这怎么能在ehcache3和springboot中设定。使用编程配置。我没有在ehcache 3.4的springboot中使用xml

  • 我正在尝试开始将Jetty与Camel一起使用。我已将依赖项添加到我的pom: 我的CamelContext初始化如下: 当我尝试启动我的服务时,该服务具有定义为以下endpoint的路由: 我得到一个例外: 关于如何设置码头组件的文档最多也缺乏。我发现了一个邮件列表条目,其中说JettyHttpComponent自Camel 2.15以来一直是抽象的,现在该组件必须使用JettyHttpComp

  • 在骆驼中使用restdsl时,我可以看到如何配置一些功能: 但无法查看如何配置特定于jackson的模块。例如: 我需要这个来获取java。时间LocalDate已正确序列化。