讓我們假設你的JSON
看起來是這樣的:
{
"input1" : "Input value",
"input2" : 3
}
而且你POJO
類看起來是這樣的:
class Entity {
private String input1;
private int input2;
private String calculated1;
private long calculated2;
...
}
在這種情況下,你可以寫一個自定義解串器爲您Entity
類:
class EntityJsonDeserializer extends JsonDeserializer<Entity> {
@Override
public Entity deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
JsonProcessingException {
InnerEntity innerEntity = jp.readValueAs(InnerEntity.class);
Entity entity = new Entity();
entity.setInput1(innerEntity.input1);
entity.setInput2(innerEntity.input2);
entity.recalculate();
return entity;
}
public static class InnerEntity {
public String input1;
public int input2;
}
}
在上面的類,你可以看到,Entity
有recalculate
方法。它可能看起來像這樣:
public void recalculate() {
calculated1 = input1 + input2;
calculated2 = input1.length() + input2;
}
您也可以將此邏輯移動到您的反序列化器類。現在
,你必須告訴您要使用自定義解串器Jackson
:
@JsonDeserialize(using = EntityJsonDeserializer.class)
class Entity {
...
}
下面的例子演示瞭如何使用這些類:
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.readValue(json, Entity.class));
這個程序打印:
Entity [input1=Input value, input2=3, calculated1=Input value3, calculated2=14]
「InnerEntity」從哪裏來? –
這是來自「EntityJsonDeserializer」的內部類,我們可以在其中反序列化輸入JSON。 –