【问题标题】:Upgrading from Wildfly8 to Wildfly17, Child attributes are not coming in API response从 Wildfly8 升级到 Wildfly17,API 响应中没有子属性
【发布时间】:2019-12-20 16:54:59
【问题描述】:

从 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,我们得到 ​​p>

{
    "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 库的问题,但我们无法重现此问题。

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

【问题讨论】:

    标签: java wildfly wildfly-8 wildfly-17


    【解决方案1】:

    当您切换到备用 Jackson 版本时,您是否排除了 Jackson 常规/默认 jars,以便您的 jars 优先?

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

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      您还可以尝试使用 Jackson 注释来注释您的超类(例如 Parent),以便将 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/

      【讨论】:

        【解决方案3】:

        问题已修复:这是由于我们使用的是 spring 版本,4.2.0(这个版本的 spring 不支持 Jackson 2.6+ 版本)这就是为什么它来自杰克逊 2.6.0。

        这是 Spring 4.2.1 中修复的 Spring 错误

        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 一起使用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多