使用@JsonTypeInfo替换字段名称

时间:2016-03-07 19:43:37

标签: java json jackson

我想知道是否有办法使用@JsonTypeInfo

替换fieldname

这是我想要实现的目标

class Tnode<T>{

    @JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT, property="type")
    T obj;

    public T getObj() {
        return obj;
    }

    public void setObj(T obj) {
        this.obj = obj;
    }

}

我输出为

{
    "obj": {
        "Foo": {
            "name": "xyz"
        }
    }
}

重点是我不想要额外的一层&#34; obj&#34;作为字段名称。我想要&#34; Foo&#34;高于一级。在代码中我将泛型类型设置为具体类型。我希望具体的类名出现而不是包装。

我确实尝试更改为include = As.PROPERTY,但它会输出为&#34; obj&#34;。

我确实使用自定义序列化程序解决了问题。但我必须设置每个领域。

public class CustomSerializer extends JsonSerializer<Object> {
    public void serialize(Object value, JsonGenerator jgen, SerializerProvider    provider) throws IOException, JsonProcessingException {
        jgen.writeStartObject();
        jgen.writeObjectField("somename", value);
        jgen.writeEndObject();
    }
}

但问题是,当我必须在Tnode类中添加实例变量时,我必须在自定义序列化程序中添加该代码。我想避免这种情况。 有什么建议吗?

1 个答案:

答案 0 :(得分:0)

没有办法做到这一点。包含Object的属性的名称(包含在类型信息中)必须是静态知道的(以定位逻辑属性)。它不能改变。