java - 为什么 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
,这对我来说似乎不合逻辑。可能有人知道这背后的原因吗?
解决方案
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 数据格式之间共享,因此可能会导致不一致或不可预知的行为。
推荐阅读
- r - R中的累积和不适用于降序数据
- excel - 比较两个无序的工作表,然后突出显示差异
- javascript - 为什么 .each 与 jQuery 选择器一起使用,然后又与 $(this) 一起使用
- laravel - 如何在 Laravel 6.X 中传递符合 PSR-6 的缓存适配器?
- javascript - 当通过 props 传入时,为什么需要 state 变量的 setter 作为 useEffect 的依赖项?
- python - 将 s3 上的 svs 文件直接下载到 AWS Lambda 中的 RAM 或无需本地下载即可打开
- spring-data-jpa - 在@DataJpaTest 之后处理 h2 数据库
- c# - 属性自动生成的夹具约束
- chilkat - Chilkat - SFTP - 身份验证失败或部分成功
- azure - 使用嵌套的“reference()”调用时出现 InvalidTemplate 错误