当前位置: 首页 > 知识库问答 >
问题:

基于实现的不同名称java类实例变量序列化

子车煌
2023-03-14

我有一个类(消息),它有一些实例变量。其中一个变量的类型是interface(MessageContent)。在将这个类序列化为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应该是:

如何通过fasterxml Jackson实现?我正在使用ObjectMapper的writeValueAsString方法,但不确定如何实现这一点。我尝试用@jsonTypeName&@jsonTypeInfo这样的注释来注释ImageMessage和VideoMessage,但不确定它们是否可能做到这一点。

共有1个答案

王昊
2023-03-14

这应该能起到作用:

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;    
}
 类似资料:
  • 问题内容: 在Java中,实例变量和方法可以具有相同的名称而没有任何不稳定或冲突吗? 我想确保是否可以摆脱它的编译问题,以免造成任何错误。 问题答案: 是的,这很好,主要是因为在语法上,它们的用法不同。

  • 问题内容: 我在这里已经读到,在Java中,具有相同名称但不同类型的两个变量可以在同一范围内共存。我的意思是这个 但是所有的Java IDE都不允许这样的代码。我想知道这样的代码在语法上是否正确,或者只是IDE不允许这样的代码防止歧义。 无论如何,这是网站的摘录 “如果幸运的话,您也许能够重新编译Jad的输出。 但是,Java VM对于变量命名的规则比Java语言本身更为宽松。例如,一个有效的类文

  • 但所有java IDE都不允许这样的代码。我想知道这样的代码在语法上是否真的正确,或者只是IDE不允许这样的代码来防止歧义。 总之,这里是从网站上摘录的 “如果你幸运的话,你也许可以重新编译JAD的输出。然而,Java VM对变量命名的规则比Java语言本身更宽松。例如,一个有效的类文件可以有几个名为'a'的变量,只要它们有不同的类型。如果你反编译这样的类,你得到的源代码将是无效的。 JAD通常会

  • 我之前的问题没有得到任何结果,可能是我问得不对,或者太详细了。 现在我的基本问题是,如何将一个具有一个类名的JSON对象反序列化为一个具有不同类名的Java对象? 例如,服务器发送/期望的JSON类是“18”(我对此控制为零)。我的Java班不可能是“18”,所以是“_18”。 简单地执行new Gson().fromjson()没有任何帮助,即使使用了不同的命名策略;_18对象始终为NULL。从

  • 我是openNlp的新手。我开始训练一个模型(TokenNameFinderTrainer),以识别名称。到目前为止还不错,但现在我想识别组织(例如“Microsoft”)。 我的问题是:opennlp默认识别哪些类型的实体?(如果有的话...) 我看到它可以处理

  • 如何获取到实体类的变量名,用的tkmybatis,没有方法引用,现在写的条件都是字符串"isDeleted"这种,不好维护,有没有方式Dog.的方式拿到变量名称,不想写好多常量,有没有类似Lombok注解的方式去实现