我有一个Packet
类,它可以序列化和反序列化:
@JsonDeserialize(builder = Packet.Builder.class)
public final class Packet {
// Constructors, getters, etc
// ...
public static final class Builder {
// Builder variables...
// ...
@JsonProperty("value_date")
public Builder valueDate(String val) {
valueDate = val;
return this;
}
@JsonProperty("generation_date")
public Builder generationTimeStamp(String val) {
generationTimeStamp = val;
return this;
}
public Packet build() { return new Packet(this); }
}
我还有一个PacketResponse
对象,如下所示:
@JsonDeserialize(builder = PacketResponse.Builder.class)
public final class PacketResponse {
// Packet and response message
private final String message;
private final Packet packet;
// Constructors, getters, etc
// ...
public static final class Builder {
private Packet packet;
private String message;
private Builder() {}
@JsonProperty("packet")
public Builder packet(Packet val) {
packet = val;
return this;
}
@JsonProperty("message")
public Builder message(String val) {
message = val;
return this;
}
public PacketResponse build() {
return new PacketResponse(this);
}
}
PacketResponse
对象的序列化工作正常,结果为:
{
"message": "the quick brown fox",
"packet": {
"valueDate": "2015-10-24",
"generationTimeStamp": "2015-11-12T20:45:24+0000"
}
}
但是,当我尝试将此JSON反序列化为PacketResponse
对象时,使用
new ObjectMapper().readValue(json, PacketResponse.class);
我得到Unrecognized field "valueDate" (class com.m.Packet$Builder), not marked as ignorable
。
似乎它正在尝试反序列化Packet
,但因为它没有直接执行,杰克逊无法看到@JsonProperty("value_date")
注释而是正在寻找valueDate
字段(因为它是构建器方法的名称)。
任何人都可以帮我找出反序列化JSON的正确方法吗?我还是杰克逊的新手,并且真的不知道如何解决这个问题。
答案 0 :(得分:1)
JSON包含“valueDate”,但@JsonProperty注释指定“value_date”(带下划线)。
注释中的“generation_date”与JSON中的“generationTimeStamp”相同。