簡體   English   中英

根據實現使用不同的名稱序列化 java class 的實例變量

[英]Serializing an instance variable of a java class with different name based on implementation

我有一個類(消息),它有一些實例變量。 這些變量之一是接口(消息內容)類型。 在將此 class 序列化為 json 期間,我想根據實現使用名稱序列化此變量(內容)。 以下是詳細的代碼片段:

public class Message {
    private String from;
    private String to;
    private MessageContent content;
    // Getters & setters
}

public interface MessageContent {}

public class VideoMessage implements MessageContent {
    private String videoUrl;
    // Getters & setters
}

public class ImageMessage implements MessageContent {
    private String imageUrl;
    // Getters & setters
}

我的要求是,當消息被序列化並且內容是 VideoMessage 類型時,序列化的 json 應該是:

{“從”:123,“到”:345, “視頻” :{“videoUrl”:“一些網址”}}

當內容是 ImageMessage 類型時,序列化的 json 應該是這樣的:

{“從”:123,“到”:345, “圖像” :{“imageUrl”:“一些網址”}}

怎么可能通過fastxml jackson? 我正在使用 ObjectMapper 的 writeValueAsString 方法,但不知道如何實現。 我嘗試使用 @JsonTypeName 和 @JsonTypeInfo 之類的注釋來注釋 ImageMessage 和 VideoMessage,但不確定它們是否可能。

這應該可以解決問題:

public class Message {
    private String from;
    private String to;
}

public class VideoMessage extends Message {
    private MessageContent video;
}

public class ImageMessage extends Message {
    private MessageContent image;
}

public interface MessageContent {}

public class VideoContent implements MessageContent {
    private String videoUrl;
}

public class ImageContent implements MessageContent {
    private String imageUrl;    
}

暫無
暫無

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

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