杰克逊多态序列化问题。 EXTERNAL_PROPERTY类型信息被忽略。

时间:2017-01-16 09:41:34

标签: java json spring jackson

我在杰克逊序列化方面遇到了一些问题。

我只想添加属性值类型的字段。

似乎只是忽略了PackageInfo注释。

package somepackage.settings.dto;

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;

import java.util.Date;

public class SettingsItemRequest {

    private String key;

    @JsonTypeInfo(
            use = JsonTypeInfo.Id.NAME,
            include = JsonTypeInfo.As.EXTERNAL_PROPERTY,
            property = "type",
            visible = true
    )
    @JsonSubTypes(
            value = {
                    @JsonSubTypes.Type(value = String.class, name = "string"),
                    @JsonSubTypes.Type(value = Number.class, name = "number"),
                    @JsonSubTypes.Type(value = Boolean.class, name = "boolean"),
                    @JsonSubTypes.Type(value = Date.class, name = "date")
            }
    )
    private Object value;

    private String type;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        this.value = value;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

无论我做什么,结果都保持不变,在结果json中属性类型为null(或者如果我删除属性type,则为null)。

提前感谢您的回答!

1 个答案:

答案 0 :(得分:0)

在类似的用例中,我实现了以下内容。子类在构造函数中设置type属性。 同样从关注点分离的角度来看,如果每个专用类型都有一个子类,则每个类都可以在构造函数中设置类型。