Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用@JsonTypeInfo替换字段名_Java_Json_Jackson - Fatal编程技术网

Java 使用@JsonTypeInfo替换字段名

Java 使用@JsonTypeInfo替换字段名,java,json,jackson,Java,Json,Jackson,我想知道是否有办法使用@JsonTypeInfo替换字段名 这就是我想要实现的目标 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.ob

我想知道是否有办法使用@JsonTypeInfo替换字段名

这就是我想要实现的目标

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”是一级以上。在代码中,我将泛型类型设置为具体类型。我希望显示具体的类名,而不是包装它

我确实尝试更改为include=As.PROPERTY,但它仍将输出为“obj”

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

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();
    }
}
公共类CustomSerializer扩展JsonSerializer{
public void serialize(对象值、JsonGenerator jgen、SerializerProvider提供程序)引发IOException、JsonProcessingException{
jgen.writeStartObject();
jgen.writeObject字段(“somename”,值);
jgen.writeEndObject();
}
}
但问题是,每当我必须在Tnode类中添加实例变量时,我必须在自定义序列化程序中添加该代码。我想避免这种情况。
有什么建议吗?

没有办法。包含对象的属性的名称(包装在类型信息中)必须是静态已知的(以定位逻辑属性)。它不能改变。

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

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();
    }
}