从 Wildfly8 升级到 Wildfly17,子属性未出现在 API 响应中

Upgrading from Wildfly8 to Wildfly17, Child attributes are not coming in API response

正在从 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 库,所以我们将 pom.xml 中的 jackson 库版本更改为 2.3.2,而 运行 Wildfly 17,但它仍然以相同的方式出现

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

我们正在努力寻找这方面的根本原因,它是否与 WF17 的内部实现有关,或者我们是否遗漏了其他内容?

已编辑

我们又尝试了一件事情:我们试图在独立 java 代码上重现 Jackson 库的问题,但我们无法重现。

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

当您切换到另一个 Jackson 版本时,您是否排除了 Jackson regular/default 罐子,以便您的罐子优先?

这可以通过添加名为 "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

希望对您有所帮助

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

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

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

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

这是 spring 中的一个错误,已在 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 一起使用。