为什么 autoDiscoverObjectMapper 在 camel-jackson-starter 中默认为 false?

Why autoDiscoverObjectMapper is false by default in camel-jackson-starter?

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

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

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

参见CAMEL-14101

The current default behaviour of the json-jackson data format is to try to lookup an ObjectMapper instance to the registry and if not found to create a new one. In case one is found, the data format instance does customize it according to its local properties but as the same ObjectMapper instance could be shared among different json-jackson data formats, it may lead to inconsistencies or unpredictable behaviors.