相关疑难解决方法(0)

杰克逊的@JsonSubTypes仍然是多态反序列化所必需的吗?

我能够序列化和反序列化抽象基类注释的类层次结构

@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)

java json jackson json-deserialization

43
推荐指数
1
解决办法
4万
查看次数

标签 统计

jackson ×1

java ×1

json ×1

json-deserialization ×1