Skip to content

Commit 55e4159

Browse files
authored
补充Jackson NoSuchMethodError问题解决方案 (#128)
1 parent 8849a35 commit 55e4159

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

README.md

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -359,34 +359,32 @@ dependencies {
359359
}
360360
```
361361

362-
### 如何解决Jackson兼容性问题
362+
### 如何解决Jackson NoSuchMethodError报错
363363

364364
在之前的版本中,我们出于安全考虑升级 Jackson 到`2.12`,并使用了`2.11`版本中新增的方法`readValue(String src, Class<T> valueType)`。如果你的项目所依赖的其他组件又依赖了低于`2.11`版本的 Jackson ,可能会出现依赖冲突。
365365

366366
我们建议有能力的开发者,升级冲突组件至较新的兼容版本。例如,issue [#125](https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient/issues/125) 版本 <`2.3.x` 的 SpringBoot 官方已不再维护,继续使用可能会有安全隐患。
367367

368-
如果难以升级,你可以使用下面的方式指定 Jackson 版本。
368+
如果难以升级,你可以用下面的方式引入 [jackson-bom](https://github.com/FasterXML/jackson-bom) 来升级 Jackson 版本。根据[通用漏洞披露信息](https://cve.mitre.org/),我们推荐升级到`2.13.2.20220328`版本。
369369

370370
#### Gradle
371371
```groovy
372-
implementation('com.fasterxml.jackson.core:jackson-databind') {
373-
version {
374-
strictly '2.12.5'
375-
}
376-
}
372+
implementation(platform("com.fasterxml.jackson:jackson-bom:2.13.2.20220328"))
377373
```
378374
#### Maven
379375
```xml
380-
<dependencyManagement>
381-
<dependencies>
382-
<dependency>
383-
<groupId>com.fasterxml.jackson.core</groupId>
384-
<artifactId>jackson-databind</artifactId>
385-
<version>2.12.5</version>
386-
</dependency>
387-
</dependencies>
388-
</dependencyManagement>
376+
<parent>
377+
<groupId>com.fasterxml.jackson</groupId>
378+
<artifactId>jackson-bom</artifactId>
379+
<version>2.13.2.20220328</version>
380+
</parent>
389381
```
382+
383+
如果出现其他组件的 `NoSuchMethodError` 报错,一般是依赖冲突导致。我们可以参考下面的解决思路:
384+
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) 工具列出项目的依赖关系树,找到问题组件的所有版本号。
385+
2. 从报错信息中找到正确的组件版本号。一般来说,导致报错的原因是使用的组件版本太低,所以我们可以找组件在依赖关系树中最新的版本号。
386+
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) 的方式来指定版本。
387+
390388
### 更多常见问题
391389

392390
请看商户平台的[常见问题](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)

0 commit comments

Comments
 (0)