在我的程序中,我使用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
视为字节[],而不是尝试用其余的数据包反序列化它?
答案 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。