我有这个JSON对象:
[
{
"field1": "xxxxx",
"field2": "vvvvvv",
"field3": "cccccc",
"field4": "zzzzzzz"
},
{
"field1": "aaaaa",
"field2": "ssssss",
"field3": "dddddd",
"field4": "ffffff"
}
]
我正在使用FasterXML的杰克逊库将此JSON反序列化为我的类Foo
。这个有这样的结构:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
private String id;
@JsonProperty("field1")
private String customField1;
@JsonProperty("field2")
private String customField2;
@JsonProperty("field3")
private String customField3;
@JsonProperty("field4")
private String customField4;
................
}
我想在反序列化时计算字段id
的值。此值是将customField4
与 customField3
连接的结果。是否可以执行此类操作,还是需要将此值传递到我的 JSON 中?
好的伙计们,解决方案是设置自定义
@JsonDeserialize(using = EntityJsonDeserializerCustom.class)
通过这种方式,我创建了一个通用静态类,其中只有 json 返回的字段,然后我覆盖反序列化方法以返回带有计算字段的对象
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonDeserialize(using = EntityJsonDeserializerCustom.class)
public class Foo {
private String id;
@JsonProperty("field1")
private String customField1;
@JsonProperty("field2")
private String customField2;
@JsonProperty("field3")
private String customField3;
@JsonProperty("field4")
private String customField4;
................
}
public class EntityJsonDeserializerCustom extends JsonDeserializer<Foo> {
@Override
public Foo deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
InnerFoo innerFoo = jp.readValueAs(InnerFoo.class);
Foo foo = new Foo();
foo.setField1(innerFoo.field1);
foo.setField2(innerFoo.field2);
foo.setField3(innerFoo.field3);
foo.setField4(innerFoo.field4);
foo.setId(innerFoo.field4 + innerFoo.field3);
return foo;
}
@JsonIgnoreProperties(ignoreUnknown = true)
public static class InnerFoo {
@JsonProperty("field1")
private String customField1;
@JsonProperty("field2")
private String customField2;
@JsonProperty("field3")
private String customField3;
@JsonProperty("field3")
private String customField4;
}
}
通过这种方式,我解决了我的问题,我希望这对社区:D有所帮助