【发布时间】:2017-01-13 20:57:09
【问题描述】:
我有以下 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”被包装到对象元素中。我不想要通用的包装器对象。我也不想直接在泛型对象中设置对象类型。
我想直接在根元素内输出“AContent”。
我们如何通过 Jackson 实现这一目标?
提前感谢您的帮助。
最好的问候,
黄鸭
【问题讨论】:
-
至于序列化,您始终可以使用跳过 Request 并直接转到 object 的自定义序列化程序,但反序列化会比较棘手。
-
我想让 jersey/jackson 自动序列化对象。是否可以通过杰克逊注释来实现?
-
如果您有能力引入 A 和 B 的基本实体,还有另一种解决方案。
-
我可以引入 A 和 B 的基本实体。这个解决方案是什么?你能提供一个例子吗?预先感谢您的帮助。最好的问候