POJOのフィールドで各逆シリアル化が実行された後、いくつかのコードを実行する必要があります。ジャクソンアノテーション(または他の)戦略を通じてこれを行う方法はありますか?
これを行う1つの方法は、PostLogicDeserializerInterfaceを実装するか、PostLogicDeserializerAbstractを拡張する、フィールドタイプごとにカスタムデシリアライザーを作成することです。ただし、これにより、(@ JsonPropertyを使用するだけでなく)保守が困難な大量のコードが乱雑になります。ですから、これは良い考えではないと思います。
@JsonDeserializeはクラスレベルで使用できますが、値クラスにのみ使用できることがわかりました。ドキュメントから:
値クラスに注釈を付ける場合、構成は値クラスのインスタンスに使用されますが、より具体的な注釈(メソッドまたはフィールドにアタッチする注釈)によってオーバーライドできます。
ですから、これもうまくいかないと思います。
- POJOのセッターメソッドでカスタムロジックを使用することは悪い習慣です。反対に、ジャクソンはリフレクションを使用してフィールドを設定していると思います...どちらも良い戦略ではありません。
私の目標は、デシリアライザーによって設定されたフィールドのパーセンテージを決定することです。呼び出された逆シリアル化(入力されたフィールド)ごとに増加するカウンターが必要になります。そして、クラス(POJO)の逆シリアル化全体が終了したら、リフレクションを使用していくつかのロジックを実行する必要があります。
私が今それを実装している方法は、
- ジャクソンマッパーによってPOJOを逆シリアル化したら、リフレクションを使用して各フィールドを調べます
- 設定されているかどうかを確認し、nullの場合はfi、プリミティブ番号(以前の初期値)の場合は-1を確認します。(このアプローチの1つの欠点は、ブール値が設定されているかどうかを確認できないことです)
- 他の種類のチェックにリフレクションを使用します(ロジックXと呼びます)
- セットフィールドとロジックXのパーセンテージに依存するロジックを実行します。
POJOをリフレクションでチェックする必要がないので、ジャクソン戦略を好むでしょう。それはむしろその場で行われることを望みます(POJOが逆シリアル化されるとき)。
乾杯、
デスポット