我们在 JBoss EAP 环境中使用 jackson-databind 时遇到问题。我们通常部署到 Tomcat 8,它可以完美运行。 Jackson 它通常会自行反序列化对象,但是当:
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
执行后我们收到此错误:
13:18:26,170 ERROR java.lang.NoSuchFieldError: SNAKE_CASE
我对错误进行了相当多的解释,但似乎 JBoss 找不到 jackson-databind 依赖项。我们验证了该类确实位于已部署的 WAR 文件中。这就是我们 POM 中的内容:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.9</version>
</dependency>
当我们将 Java 类复制到代码库中时,它可以在 JBoss 上完美运行,但这显然并不理想。有人见过 JBoss 没有找到依赖吗?
最佳答案
Jackson databind 已作为 JBoss 模块存在,因此您的异常是应用程序部署期间库加载冲突的结果。
更准确地说,Jackson databind 位于 jboss-eap-7.0\modules\system\layers\base\com\fasterxml\jackson\core\jackson-databind\main\
在版本 2.5.4 中。因此,您应该将 Maven 依赖项设置为 <scope>provided</scope>
.
但是,您请求的 2.5.4 和 2.8.9 之间存在一些更改。你没有提到你打算使用Jackson的哪些功能,但至少你不能使用SNAKE_CASE
因为它在旧版本中尚不存在。一种选择是您可以回退到旧版本 CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
。如果这是 Not Acceptable ,您将必须使用 jboss-deployment-structure.xml
自定义 JBoss 类加载。 。使用此描述符,您可以选择排除 JBoss 模块提供的 jackson 数据绑定(bind),然后可以将 jackson 库与您的部署捆绑在一起。您可以在 JBoss/Wildfly wiki 中找到更多信息。
关于java - JBoss EAP 7 中缺少 Jackson 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46366031/