我正在尋找將字段注入到JSON中,我正在從POJO序列化。我正在使用Jackson來執行序列化,並且我可以創建一個客戶序列化程序來注入該字段。我至今是:在JSON序列化中注入字段
public class Main {
public static void main(String[] args) throws IOException {
Child newChild = new Child();
newChild.setName("John");
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("Custom Child Serializer", new Version(1,0,0,null));
module.addSerializer(new CustomChildSerializer());
mapper.registerModule(module);
System.out.println(mapper.writeValueAsString(newChild));
System.in.read();
}
}
class CustomChildSerializer extends SerializerBase<Child> {
public CustomChildSerializer() {
super(Child.class);
}
@Override
public void serialize(Child child, JsonGenerator jgen, SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
jgen.writeStartObject();
jgen.writeStringField("Name", child.getName());
jgen.writeStringField("Injected Value","Value");
jgen.writeEndObject();
}
}
class Child {
private String Name;
public String getName() { return Name; }
public void setName(String name) { Name = name; }
}
假設Child
是一類,它是一個API的一部分,我不能修改它。有沒有辦法可以修改自定義序列化程序來使用Child
類的默認序列化,以便Child
更改時,我不必修改自定義序列化程序?
爲什麼使用自定義序列化程序,例如看起來你可以簡單地使用沒有自定義序列化程序的對象映射程序。如果您試圖解決一些更復雜的問題,並且您不能修改Child對象來說添加註釋。您可以使用jackson mixin添加序列化參數,而無需手動序列化對象。 –
@ChrisHinshaw我的理解是,Mixins不支持添加字段,而是映射現有數據。在這種情況下,我無法修改'Child'類,因爲它是從外部API返回給我的數據。 –
您正在使用哪個版本的Jackson?你能用最新的 - 2.2.3嗎? –