阻止杰克逊阅读嵌入式部分JSON

时间:2014-08-20 10:37:52

标签: java json jackson

在我的程序中,我使用Netty和Multicast套接字来接收一些多播数据包。我正在包装并拆分实际的大数据,因此过程看起来像这样。 (缩写类)

class Packet {
  private long id;
  private int seq;
  private int max_seq;
  private byte[] data;
}

内部data是另一个JSON字符串。所以我收集数据包,然后将完整的JSON重新组合在一起。问题是我还使用Jackson将Packet序列化为JSON然后反序列化。

我遇到的问题是我认为Jackson也试图反序列化data。原因是因为我正在从数据报包中取出byte []数据并将其提供给对象映射器。

我得到的错误是: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "@type" (Class pctelelog.Packet), not marked as ignorable at [Source: [B@36254f63; line: 1, column: 43] (through reference chain: pctelelog.Packet["@type"])

数据是一个序列化类,已经设置了许多类型以进行正确的反序列化,这就是为什么我认为杰克逊有问题。

有没有办法告诉杰克逊将data视为字节[],而不是尝试用其余的数据包反序列化它?

2 个答案:

答案 0 :(得分:0)

尝试在getter方法上添加@JsonIgnore,并在@JsonProperty(name = "data")属性上添加byte[] data作为setter方法:

@JsonProperty(name = "data")
private byte[] getData() {
    // get data
    return data;
}

答案 1 :(得分:0)

错误消息表明问题不在于data字段。

在序列化时,您似乎包含Packet类的类型信息(例如,可能使用@JsonTypeInfo)作为属性@type,但反序列化不处理{{1属性正确。

有关详细信息,请参阅http://wiki.fasterxml.com/JacksonPolymorphicDeserialization