[英]Json polymorphism with Jackson and Json without wrapper object
我有以下Java bean:
/**
* The top container. It uses generics.
*/
public class Response {
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.WRAPPER_OBJECT,
property = "type"
)
@JsonSubTypes({
@JsonSubTypes.Type(name = "AContent", value = A.class),
@JsonSubTypes.Type(name = "BContent", value = B.class),
})
private E object;
}
/**
* First type
*/
@JsonRootName("AContent")
public class A {
...
}
/**
* Second type
*/
@JsonRootName("BContent")
public class B {
...
}
處理請求時,我只期望以下輸出:
{
AContent: { ...}
}
但是,我得到以下輸出:
{
object: {
AContent: { ...}
}
}
元素“AContent”被包裝到object元素中。 我不想要泛型的包裝器對象。 我也不想直接在通用對象中設置對象類型。
我想直接在根元素內輸出“AContent”。
我們怎樣才能與傑克遜達成協議?
在此先感謝您的幫助。
最好的祝福,
黃鴨
既然你說你可以為A和B提供基本實體,解決方案將是:
@JsonSerialize(using = ResponseSerializer.class)
public class Response<T> {
private T object;
...
}
基礎實體(其他人必須擴展它):
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.WRAPPER_OBJECT
)
@JsonSubTypes({
@JsonSubTypes.Type(name = "AContent", value = EntityA.class),
@JsonSubTypes.Type(name = "BContent", value = EntityB.class),
})
public class Entity {
...
}
和序列化器:
public class ResponseSerializer extends JsonSerializer<Response> {
@Override
public void serialize(Response value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
Class<?> responseClass = value.getObject().getClass();
JavaType responseJavaType = serializers.constructType(responseClass);
gen.writeStartObject();
gen.writeFieldName(serializers.findTypeSerializer(responseJavaType).getTypeIdResolver().idFromValue(value.getObject()));
serializers.findValueSerializer(responseClass).serialize(value.getObject(), gen, serializers);
/* Here you must manually serialize other properties */
/* Like gen.writeStringField("property", value.getProperty()); */
gen.writeEndObject();
}
}
PS我刪除了你沒有輸出的額外注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.