カスタムを使用しますJsonSerializer
。
public class Response {
private String status;
private String error;
@JsonProperty("p")
@JsonSerialize(using = CustomSerializer.class)
private Object data;
// ...
}
public class CustomSerializer extends JsonSerializer<Object> {
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeObjectField(value.getClass().getName(), value);
jgen.writeEndObject();
}
}
次に、次の2つのオブジェクトをシリアル化するとします。
public static void main(String... args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Response r1 = new Response("Error", "Some error", 20);
System.out.println(mapper.writeValueAsString(r1));
Response r2 = new Response("Error", "Some error", "some string");
System.out.println(mapper.writeValueAsString(r2));
}
最初のものは印刷されます:
{"status":"Error","error":"Some error","p":{"java.lang.Integer":20}}
そして2番目のもの:
{"status":"Error","error":"Some error","p":{"java.lang.String":"some string"}}
p
ラッパーオブジェクトの名前は、単にp
レースホルダーとして機能するため、使用しました。これを削除する場合は、クラス全体JsonSerializer<Response>
のカスタムシリアライザーを作成する必要があります。