2

从 Wildfly-8.1.0.Final 升级到 Wildfly-17.0.1.Final

class Parent {
    String prop1;

    public Parent(String prop1) {
        this.prop1 = prop1;
    }
}

class Child extends Child {
    String prop2;

    public Child(String prop1, String prop2) {
        super(prop1);
        this.prop2 = prop2;
    }
}

在控制器层

public Parent getDetails() {
    return serviceImpl.getDetails();
}

在服务层

public Child getDetails() {
    return new Child("String1", "String2");
}

从 Wildfly 8,我们得到

{
    "prop1": "String1",
    "prop2": "String2"
}

但是从 Wildfly 17 开始,我们得到了

{
    "prop1": "String1"
}

我们认为这可能是由于 Jackson 库,所以我们在使用 Wildfly 17 运行时将 pom.xml 中的 jackson 库版本更改为 2.3.2,但它仍然以相同的方式出现

我们也尝试将 Jackson 2.9.8 与 Wildfly 8 一起使用,但 WF8 仍然返回了两个属性“prop1”和“prop2”

我们正试图找到造成这种情况的根本原因,它是否与 WF17 的内部实现有关,或者我们在这里遗漏了其他东西?

已编辑

我们还尝试了另一件事:我们尝试在独立的 Java 代码上重现 Jackson 库的问题,但我们无法重现此问题。

虽然它仍然与 Wildfly 8 或 Wildfly 17 一起运行时与 Jackson 2.6.0 以上版本一起运行,但直到 2.5.5 才出现。

4

3 回答 3

0

当您切换到备用杰克逊版本时,您是否排除了杰克逊常规/默认罐子,以便您的罐子优先?

这可以通过添加一个名为“jboss-deployment-structure.xml”的文件(放在 WEB-INF 文件夹下)来完成,其内容是 - 例如:

<?xml version="1.0"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <deployment>
        <exclusions>        
            <module name="com.fasterxml.jackson.core.jackson-databind"/>
            <module name="com.fasterxml.jackson.core.jackson-core"/>
            <module name="com.fasterxml.jackson.core.jackson-annotations"/>
            <module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider"/>

您可以在此处找到各种 Jackson 模块:.../wildfly-17.0.1.Final/modules/system/layers/base/com/fasterxml/jackson

希望这可以帮助

于 2019-08-17T14:43:08.020 回答
0

您还可以尝试Parent使用 Jackson 注释来注释您的超类(例如),以便注册Child为子类。

@JsonTypeInfo(use=Id.NAME)
@JsonSubTypes({
        @JsonSubTypes.Type(value=Child.class, name="child"),        
})

请小心,因为如果您需要反序列化您的 json ,这还不够。看看这里: http: //federico.defaveri.org/2016/11/20/handling-polymorphism-with-jackson/

于 2019-08-19T10:40:42.777 回答
0

问题修正:这是由于我们使用的 spring 版本,4.2.0(这个版本的 spring 不支持 Jackson 2.6+ 版本)这就是它来自 Jackson 2.6.0 的原因。

这是 Spring 4.2.1 中修复的一个错误

https://github.com/spring-projects/spring-framework/issues/18008

https://jira.spring.io/browse/SPR-13429?redirect=false

现在它也可以与 Spring 4.2.1 和 Jackson 2.9.9 一起使用。

于 2019-08-22T12:51:18.160 回答