java - JBoss EAP 7 中缺少 Jackson 依赖项

标签 java json maven jboss jackson

我们在 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/

相关文章:

javascript - HTTP PUT 方法返回未找到错误

java - maven - 创建生成的 jar 文件的存档

java - 控制台输出到 HTML 文件

java - 总是在 fragmentManager 获取空指针

Java/Android工作室: For loop - Same data shows multiple times

javascript - 如何使用 javascript 将 JSON 对象操作为数组

java - 编写我自己的compareToIgnoreCase方法

java - 为什么 DefaultJackson2JavaTypeMapper.toJavaType() 不支持抽象类和接口(interface)作为推断类型?

java - Maven 编译失败,显示 "cannot find symbol",而使用 Eclipse,它编译

java - Netbeans:项目主要 Artifact 通过maven-shade-plugin处理