【发布时间】:2013-10-06 06:44:09
【问题描述】:
我正在编写一系列 Java 类来表示 Spring MVC Web 服务中的请求和响应,配置为使用基于 Jackson 2.0 注释的 JSON 处理,以及 jackson-databind 模块。这些类包含各种字段,并在需要时进行注释,以启用 JSON 对象的序列化和反序列化。
我有一个 POJO,其中包含一个 Map 字段,具有多态值。映射值可以采用多种类型,主要是 String、其他模型类,尤其是表示为 JsonNode 的其他 JSON 对象。
@JsonTypeInfo(use = Id.CLASS)
private Map<String, Object> outputValues;
通过使用@JsonTypeInfo 注释,Jackson 可以正确序列化生成的 JSON 中的类名,从而可以将值反序列化为适当的具体类型。
例如,对于类型为 ArrayNode(JsonNode 的子类型)的值,Jackson 将在生成的 JSON 中显式添加类型名称 "com.fasterxml.jackson.databind.node.ArrayNode"。
outputValues: {
result: [
"com.fasterxml.jackson.databind.node.ArrayNode",
[
{
Content-Type: "application/json",
url: "http://server.url"
},
{
Content-Type: "application/json",
url: "http://server.url.2"
}
]
]
}
我希望实现的是一种特殊情况,当遇到JsonNode 或其子类型之一作为映射值时,JSON 对象会被序列化没有 显式添加类型名称。在此示例中,在反序列化时,Jackson 会在发现未知数组结构时生成 ArrayNode。当它遇到时,它仍然会继续产生其他多态类型。
上面的例子看起来像这样:
outputValues: {
result:
[
{
Content-Type: "application/json",
url: "http://server.url"
},
{
Content-Type: "application/json",
url: "http://server.url.2"
}
]
}
【问题讨论】:
-
你得到答案了吗?如果是,请将其添加为答案。我也有同样的问题
-
不幸的是,这是不可能的。我添加了到目前为止我得到的答案。
标签: java json web-services spring-mvc jackson