class A {
private String z;
private String y;
private List<B> bs;
}
class B {
private String x;
}
public class ASerializer extends JsonSerializer<A> {
@Override
public void serialize(A value, JsonGenerator gen,
SerializerProvider serializers) throws IOException,
JsonProcessingException {
gen.writeStartObject();
gen.writeStringField("z", value.getZ());
gen.writeStringField("y", value.getY());
gen.writeFieldName("bs");
gen.writeStartArray(value.getBs().size());
for (B b : value.getBs())
gen.writeObject(b);
gen.writeEndArray();
gen.writeEndObject();
}
public class ASerializer extends JsonSerializer<A>
{
@Override
public void serialize(B value, JsonGenerator gen,
SerializerProvider serializers) throws IOException,
JsonProcessingException {
gen.writeStartObject();
gen.writeStringField("x", value.getX());
gen.writeEndObject();
}
@Override
public A deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
A a = null;
JsonNode node = p.getCodec().readTree(p);
String z = node.get("z").asText();
String y = node.get("y").asText();
List<B> bs = node.get("bs") //.asListofB
//...
注意:A
和B
是第三方类。所以我不能注释这些。
即使不能直接注释这些类,也可以编写“mixin”注释类。这些类的存在只是为了保存注释,然后就像它们在其他类上一样应用注释。例如:
public abstract class AMixin {
@JsonProperty public abstract String getZ();
@JsonProperty public abstract String getY();
@JsonProperty public abstract List<B> getBs();
}
要配置mixin:
mapper.addMixInAnnotations(A.class, AMixin.class);
如果您沿着基于JsonNode
表示形式(btw extendStdNodeBasedDeserializer
)编写反序列化器的路线前进,那么您会遇到这样一个问题,即反序列化器通常在流上工作,而不是在树节点上工作。现在,任何树节点都可以作为流进行遍历:因此,可以接受node.get(“BS”)
,调用traverse()
,从而获得一个JSONParser
,并将其传递给反序列化器。当然,如果反序列化器最终将流转换回树节点,这有点浪费...
我知道我可以创建一个单独的Report类,然后使用@JSONProperty将其嵌入到ReportResponse中。有没有一种方法可以避免这种情况,并用一个注释标记ReportResponse类,将它映射到JSON中的“Report”元素?
我正在创建一个具有嵌套列表的API。Jackson似乎是一个创建对象的好工具,但我不太清楚如何嵌套列表,我想知道这是否可能。 我的对象看起来像这样。 我希望有一种方法可以将其映射到json,看起来像: 我们希望能够做到这一点,以便我们可以将属性添加到列表中。
我有以下xml 我需要将其反序列化为以下POJO: 这里的问题是被包装在元素中
我正在尝试使用Jakson反序列化一个嵌套的多态类型。也就是说,我的顶级类型引用了另一个多态类型,该类型最终由不抽象的类扩展。这不起作用,它会抛出一个异常。 下面是我尝试做的一个简化的例子。 我得到了关于抽象类型的标准异常。 让我解释一下我的用例。我有一个描述数据工作流的Json文档。我在“Level One”有一个抽象类型,描述对单个值的操作。我派生了一堆不是抽象的类,它们实现了公共操作(我用@
问题内容: 我有一个Vendor对象,可以从一个单独的“ vendor” json序列中反序列化,但是我想将此序列反序列化为一个,我只是想不出如何让Jackson合作。有小费吗? 问题答案: 您的数据存在问题,因为您的数组中有内部 包装 对象。想必你的对象被设计成手柄,,,但每次的多个对象也都包裹在一个对象与单一属性。 我假设您正在使用Jackson 数据绑定 模型。 如果是这样,那么有两件事要考
但它返回一个id为空且产品为空的对象。当然,我不需要为这个简单的操作编写自定义的吗?