解析 Java JSON 时的动态 @JsonSubTypes

Dun*_*ebs 5 java json

我有一个涉及动态 @JsonSubTypes 贡献者的系统,我试图弄清楚如何重构我的代码(下面的示例)以不使用 @JsonSubTypes 注释,而是动态或在运行时提供这些值。有谁知道这是否可能?

   @JsonSubTypes({
    @JsonSubTypes.Type(value = Dog.class, name = "dog"),
    @JsonSubTypes.Type(value = Cat.class, name = "cat")
})
Run Code Online (Sandbox Code Playgroud)

Dun*_*ebs 4

研究了这一点,可以采取几种不同的方法,最有意义的方法是在具有不同子类实现的基类上声明此注释。

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
Run Code Online (Sandbox Code Playgroud)

这会将“@class”元字段添加到序列化的 JSON 中,然后在反序列化时使用该元字段来确定正在使用哪个子类。唯一的缺点是在编写手动 JSON 时必须包含该字段。