我能够序列化和反序列化抽象基类注释的类层次结构
@JsonTypeInfo(
use = JsonTypeInfo.Id.MINIMAL_CLASS,
include = JsonTypeInfo.As.PROPERTY,
property = "@class")
Run Code Online (Sandbox Code Playgroud)
但没有@JsonSubTypes列出子类,子类本身相对未注释,只有一个@JsonCreator在构造函数上.ObjectMapper是vanilla,我没有使用mixin.
关于PolymorphicDeserialization和"type id"的 Jackson文档建议(强烈地)我需要在@JsonSubTypes抽象基类上使用注释,或者在mixin上使用它,或者我需要使用ObjectMapper注册子类型.并且有很多SO问题和/或博客帖子都同意.但它确实有效.(这是Jackson 2.6.0.)
那么......我是一个尚未记录的功能的受益者,还是我依赖于无证件行为(可能会改变)或是其他事情还在继续?(我问,因为我真的不希望它成为后两者中的任何一个.但我知道.)
编辑:添加代码 - 和一个评论.评论是:我应该提到我反序列化的所有子类都与基本抽象类在同一个包和同一个jar中.
抽象基类:
package so;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(
use = JsonTypeInfo.Id.MINIMAL_CLASS,
include = JsonTypeInfo.As.PROPERTY,
property = "@class")
public abstract class PolyBase
{
public PolyBase() { }
@Override
public abstract boolean equals(Object obj);
}
Run Code Online (Sandbox Code Playgroud)
它的一个子类:
package so;
import org.apache.commons.lang3.builder.EqualsBuilder;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public final class SubA extends PolyBase
{ …Run Code Online (Sandbox Code Playgroud)