【问题标题】:Jackson polymorphism specified dynamically -- without @JsonSubTypes动态指定的杰克逊多态性——没有@JsonSubTypes
【发布时间】:2020-03-18 22:24:39
【问题描述】:

我有一些多态 POJOS,我知道我可以利用 Jackson 的多态性:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, property="message_type")
@JsonSubTypes({
    @JsonSubTypes.Type(name = "repo_item", value = Item.class),
    @JsonSubTypes.Type(name = "repo_folder", value = Folder.class)
})
public abstract class Node {
   UUID id;
   String name;
   @JsonProperty("message_type")
   public abstract String _getMessageType();
}
public class Item extends Node {
   String properties;
   @Override
   public String _getMessageType() { return "repo_node"; }
}
public class Folder extends Node {
   String color;
   @Override
   public String _getMessageType() { return "repo_folder"; }
}

这很好用。但是,我在编译时并不知道 Node 的所有子类。我从 IDL 定义生成代码,生成的类是 Node.js 的子类型。如何在运行时注册 @JsonSubTypes 注释的等效项?

【问题讨论】:

    标签: jackson-databind


    【解决方案1】:

    这似乎已经得到回答here 并进一步讨论here

    简而言之,如果您不能使用我的问题中指出的 @JsonSubTypes.Type 注释,则在创建它时在对象映射器上注册该类及其鉴别器值:

    ObjectMapper mapper = new ObjectMapper();
    mapper.registerSubtype("repo_folder", RepoFolder.class);
    mapper.registerSubtype("repo_item", RepoItem.class);
    

    【讨论】:

      猜你喜欢
      • 2013-08-30
      • 2014-08-29
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多