我想知道是否有办法使用@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类中添加实例变量时,我必须在自定义序列化程序中添加该代码。我想避免这种情况。 有什么建议吗?
答案 0 :(得分:0)
没有办法做到这一点。包含Object的属性的名称(包含在类型信息中)必须是静态知道的(以定位逻辑属性)。它不能改变。