ジャクソンのカスタムデシリアライザに問題があります。デフォルトのシリアライザにアクセスして、逆シリアル化先のオブジェクトを作成します。ポピュレーションの後で、カスタムの処理をいくつか行いますが、最初にデフォルトのJackson動作でオブジェクトをデシリアライズします。
これは私が現在持っているコードです。
public class UserEventDeserializer extends StdDeserializer<User> {
private static final long serialVersionUID = 7923585097068641765L;
public UserEventDeserializer() {
super(User.class);
}
@Override
@Transactional
public User deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
User deserializedUser = null;
deserializedUser = super.deserialize(jp, ctxt, new User());
// The previous line generates an exception java.lang.UnsupportedOperationException
// Because there is no implementation of the deserializer.
// I want a way to access the default spring deserializer for my User class.
// How can I do that?
//Special logic
return deserializedUser;
}
}
特別なロジックを開始する前にPOJOを事前入力できるように、デフォルトのデシリアライザーを初期化する方法が必要です。
カスタムデシリアライザー内からdeserializeを呼び出す場合、どのようにシリアライザークラスを構築しても、メソッドは現在のコンテキストから呼び出されているようです。私のPOJOの注釈のため。これにより、明らかな理由でスタックオーバーフロー例外が発生します。
私は初期化を試みましたBeanDeserializer
が、プロセスは非常に複雑であり、それを行う正しい方法を見つけることができませんでした。またAnnotationIntrospector
、のアノテーションを無視するのに役立つかもしれないと考えて、をオーバーロードしてみましたDeserializerContext
。最後にJsonDeserializerBuilders
、Springからアプリケーションコンテキストを取得するためにいくつかの魔法のことを行う必要がありましたが、使用してある程度成功した可能性があります。JsonDeserializer
注釈を読み取らずに逆シリアル化コンテキストを構築する方法など、より明確な解決策につながる可能性のあることを教えてください。
DeserializationContext
作成または変更すべきものではありません。それはによって提供されObjectMapper
ます。AnnotationIntrospector
同様に、アクセスを取得するのに役立ちません。