簡體   English   中英

從 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 庫,所以我們在運行 Wildfly 17 時將 pom.xml 中的 jackson 庫版本更改為 2.3.2,但它仍然以相同的方式出現

我們也嘗試使用帶有 Wildfly 8 的 Jackson 2.9.8,但 WF8 仍然返回了兩個屬性“prop1”和“prop2”

我們正試圖找出造成這種情況的根本原因,它是否與 WF17 的內部實現有關,還是我們在這里遺漏了其他東西?

已編輯

我們還嘗試了另一件事:我們嘗試在獨立的 Java 代碼上重現 Jackson 庫的問題,但無法重現此問題。

雖然它仍然與 Wildfly 8 或 Wildfly 17 一起在 Jackson 2.6.0 以上版本運行時出現,但直到 2.5.5 這不會出現。

當您切換到備用 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

希望這可以幫助

您也可以嘗試使用 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/

問題修復:這是由於我們使用的是 spring 版本,4.2.0(這個 spring 版本不支持 Jackson 2.6+ 版本)這就是它來自 Jackson 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 一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM