Java 使用@JsonTypeInfo替换字段名
我想知道是否有办法使用@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
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();
}
}