簡體   English   中英

JSON:反序列化子類型

[英]JSON: de-serializing subtypes

此資源上已經存在相同的問題 但是答案對我來說似乎是完全錯誤的,對我不起作用。

有什么問題:

com.fasterxml.jackson.databind.JsonMappingException:無法將類型id'MyRequest $ GetAll'解析為[簡單類型,類Request]的子類型

我所擁有的:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@class")
@JsonSubTypes({ @JsonSubTypes.Type(value = MyRequest.GetAll.class)})
public class Request {
}

public class MyRequest extends Request {

    public static class GetAll extends MyRequest {
        public GetProfiles() {
    }
}

我嘗試做的是:

我試圖遵循建議,並將子類型注冊從注釋移至Java代碼:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public class Request {
}

public class MyRequest extends Request {

    public static class GetAll extends MyRequest {
        public GetProfiles() {
    }
}

public class Utils {
    private static final ObjectMapper mapper;

    static {
        mapper = new ObjectMapper();
        registerSubtypes();
        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
        mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
    } 

    private static registerSubtypes() { //REGISTER ALL SUBTYPES
      mapper.registerSubtypes(MyRequest.GetAll.class);
      //...
    }   
}

但是沒有結果,我還是例外! 在這種情況下,最奇怪的是它在我的本地計算機上可以正常工作,但在部署后無法正常工作。

題:

我應該嘗試解決什么問題?

不確定是否有所不同,但您可能想在子類型上使用@JsonTypeName來顯式命名它,而不是依賴簡單的類名。 這樣可以更安全地維護,並且在您重構事物時(例如將類移至其他程序包)不太可能引起問題。

暫無
暫無

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

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