From 06d313229e5b07b6596f65e83b91f6fa02271e03 Mon Sep 17 00:00:00 2001 From: lianup <769025704@qq.com> Date: Thu, 31 Mar 2022 10:50:06 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85Jackson=20NoSuchMethodError?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 724ec9c..f023df7 100644 --- a/README.md +++ b/README.md @@ -359,34 +359,32 @@ dependencies { } ``` -### 如何解决Jackson兼容性问题 +### 如何解决Jackson NoSuchMethodError报错 在之前的版本中,我们出于安全考虑升级 Jackson 到`2.12`,并使用了`2.11`版本中新增的方法`readValue(String src, Class valueType)`。如果你的项目所依赖的其他组件又依赖了低于`2.11`版本的 Jackson ,可能会出现依赖冲突。 我们建议有能力的开发者,升级冲突组件至较新的兼容版本。例如,issue [#125](https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient/issues/125) 版本 <`2.3.x` 的 SpringBoot 官方已不再维护,继续使用可能会有安全隐患。 -如果难以升级,你可以使用下面的方式指定 Jackson 版本。 +如果难以升级,你可以用下面的方式引入 [jackson-bom](https://github.com/FasterXML/jackson-bom) 来升级 Jackson 版本。根据[通用漏洞披露信息](https://cve.mitre.org/),我们推荐升级到`2.13.2.20220328`版本。 #### Gradle ```groovy -implementation('com.fasterxml.jackson.core:jackson-databind') { - version { - strictly '2.12.5' - } -} +implementation(platform("com.fasterxml.jackson:jackson-bom:2.13.2.20220328")) ``` #### Maven ```xml - - - - com.fasterxml.jackson.core - jackson-databind - 2.12.5 - - - + + com.fasterxml.jackson + jackson-bom + 2.13.2.20220328 + ``` + +如果出现其他组件的 `NoSuchMethodError` 报错,一般是依赖冲突导致。我们可以参考下面的解决思路: +1. 从报错信息中找到出现问题的组件(如上面的 Jackson )。根据你的项目的构建方式,选择 [Gradle](https://docs.gradle.org/current/userguide/viewing_debugging_dependencies.html#sec:listing_dependencies) 或 [Maven](https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html) 工具列出项目的依赖关系树,找到问题组件的所有版本号。 +2. 从报错信息中找到正确的组件版本号。一般来说,导致报错的原因是使用的组件版本太低,所以我们可以找组件在依赖关系树中最新的版本号。 +3. 指定组件版本。如果组件提供了 bom 依赖,可以使用上述方式引入 bom 依赖来指定版本。否则,根据你的项目的构建方式,选择 [Gradle](https://docs.gradle.org/current/userguide/dependency_constraints.html#sec:adding-constraints-transitive-deps) 或 [Maven](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html) 的方式来指定版本。 + ### 更多常见问题 请看商户平台的[常见问题](https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay7_0.shtml),或者[这里](https://wechatpay-api.gitbook.io/wechatpay-api-v3/chang-jian-wen-ti)。