为什么在骆驼杰克逊启动器中autoDiscoverObjectMapper默认为假?

问题描述

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

解决方法

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数据格式之间共享,因此可能导致不一致或不可预测的行为。