ジャクソンは、あなたが出力を生成して制御することができるカスタム・シリアライザを使用することができます。次 は、これを行うためのステップです:
は、簡単なテスト
public static void main(String[] args) throws JsonProcessingException {
User user = new User(1L, "Mike");
ObjectMapper om = new ObjectMapper();
om.writeValueAsString(user);
System.out.println(om.writeValueAsString(user));
}
serialzer
static class CustomSerializer extends JsonSerializer{
@Override
public void serialize(Object value, JsonGenerator jgen, SerializerProvider serializers) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeArrayFieldStart("inputFields");
Field[] fields = value.getClass().getDeclaredFields();
for (Field field : fields) {
try {
field.setAccessible(true);
jgen.writeStartObject();
jgen.writeObjectField("name", field.getName());
jgen.writeObjectField("value", field.get(value));
jgen.writeEndObject();
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
jgen.writeEndArray();
jgen.writeEndObject();
}
}
を宣言カスタム・シリアライザ
@JsonSerialize(using = CustomSerializer.class)
static class User{
public Long id;
public String firstName;
public User(Long id, String firstName) {
this.id = id;
this.firstName = firstName;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
を使用するようにPOJOに注釈を付けると出力は
になります210
{"inputFields":[{"name":"id","value":1},{"name":"firstName","value":"Mike"}]}
ますクラス 'User'オブジェクトの配列を' Serialize'するためにカスタムシリアライザが必要です。 –
これは、あなたが何をする必要があるかです:http://www.baeldung.com/jackson-custom-serialization – dabadaba
なぜあなたは、このような厄介なJSON構造が必要なのでしょうか? '' id '': "123"、 "name": "George" 'を持つ方が良いでしょうか? – BadCash