首页 > 解决方案 > 为什么 autoDiscoverObjectMapper 在 camel-jackson-starter 中默认为 false?

问题描述

目前,我们正在将我们的应用程序从 Camel 2.x 迁移到 Camel 3.x,并面临一个问题,即默认情况下不再JacksonDataFormat使用应用程序上下文中的 an ObjectMapper。相反,您需要提供一个属性camel.dataformat.json-jackson.auto-discover-object-mapper=true才能使此功能正常工作。我不明白为什么这不等于模块true的默认值camel-jackson-starter,这对我来说似乎不合逻辑。可能有人知道这背后的原因吗?

标签: javaapache-camelspring-camelcamel-jackson

解决方案


Apache Camel 正在ObjectMapper根据您的JacksonDataFormat定义修改 bean 属性。这真的很令人困惑,如果看似不相关DataFormat的定义正在更改ObjectMapper注册表中的单例 bean,您可能已经为应用程序的不同部分进行了配置。对于某些开发人员来说,这可能是出乎意料的,因此已决定在启动期间快速失败。

如果您使用多个JacksonDataFormat定义,请不要设置camel.dataformat.json-jackson.auto-discover-object-mapper=true. 您会看到一些奇怪的行为,这将非常难以调试。

参见CAMEL-14101

json-jackson 数据格式的当前默认行为是尝试在注册表中查找 ObjectMapper 实例,如果没有找到则创建一个新实例。万一找到了,数据格式实例确实会根据其本地属性对其进行自定义,但是由于相同的 ObjectMapper 实例可以在不同的 json-jackson 数据格式之间共享,因此可能会导致不一致或不可预知的行为。


推荐阅读