ジャーナルデシリアライザを実装して、JSONが変更されたときにJSONを移行する方法を考えています(たとえば、名前が変更されたフィールドのように、今や一貫性のないJSON一貫性のあるものにする)。ジャーナルのカスタムデシリアライゼーション - JsonParserを2回読み取ることができない
これを実行する方法の1つは、JsonDeserializerを作成し、適切な最終クラスとしてJSONを読み取り、MAPとして再度読み取って、変更を選択することです。
JSONを読み込んだり逆シリアル化するたびに、バッキングストリームが閉じられるため、私はそれを行うようには見えません。私は、私は何とかいくつかの中でのデシリアライズを委任することができるようにしたいMyPOJOカスタムデシリアライザを使用していたときに、例えば、カスタム日付デシリアライザで、既にカスタマイズされたものがあるので、新しいObjectMapperを作成避けています
class CustomDeserializer extends StdDeserializer<MyPOJO> implements ResolvableDeserializer{
private final JsonDeserializer<?> deserializer;
private final ObjectMapper mapper;
public CustomDeserializer(JsonDeserializer<?> deserializer, ObjectMapper mapper) {
super(MyPOJO.class);
this.deserializer = deserializer;
this.mapper = mapper;
}
@Override
public MyPOJO deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
MyPOJO deserialized = (MyPOJO) deserializer.deserialize(jp, ctxt);
// Custom migration would go here...
return deserialized;
}
@Override
public void resolve(DeserializationContext ctxt) throws JsonMappingException {
((ResolvableDeserializer) deserializer).resolve(ctxt);
}
}
以前の設定をすべて使用します。