アノテーション付きフィールドのターゲット タイプに応じて異なる動作をする Jackson デシリアライザーを構成したいと考えています。
public class Car {
@JsonSerialize(using=IdSerializer.class)
@JsonDeserialize(using=IdDeserializer.class)
String id
}
public class Bus {
@JsonSerialize(using=IdSerializer.class)
@JsonDeserialize(using=IdDeserializer.class)
Id id
}
Jackson シリアライザーは、データの変換元の型を認識しているため、これは機能しています。
public class IdSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator jsonGen, SerializerProvider provider) throws IOException {
// value is the annotated field class
if(value instanceof String)
jsonGen.writeObject(...);
else if (value instanceof Id)
jsonGen.writeObject(...);
else
throw new IllegalArgumentException();
}
}
Jackson デシリアライザーは、データを変換する対象の型を認識していないようです。
public class IdDeserializer extends JsonDeserializer<Object> {
@Override
public Object deserialize(JsonParser jp, DeserializationContext context) throws IOException {
// what is the annotated field class?
}
}