フィールドの読み取り中に順序付けが必要な特定のクラスのデシリアライザーがあります。クラスに 2 つのフィールド (field1とfield2) があり、 を読み取るfield2には、最初に が必要だとしますfield1。
たとえば、次の json データの場合、デシリアライザーが解析するときにfield2,field1が既に設定されているため、機能します。
{"field1": 3, "field2": 4}
ただし、フィールドを逆にすると:
{"field2": 4, "field1": 3}
field2が設定されていないjp.skipChildrenため、スキップする必要がありfield1ます。がfield1解析されると、Jackson は を再読み込みして解析する必要がありますfield2。
1 つのオプションは、field2 をスキップする代わりに解析し、それを変数に保持して、field1 が設定されたときに field2 にデータを保持する変数を使用できるようにすることです。でも; の値に基づいて、field1解析する必要がない可能性があるfield2ため、コードのこの部分ではパフォーマンスが重要であるため、より良い解決策を探しています。
メソッドを使用していますが、Mapper.readValue(byte[], MyClass.class)ジャクソンがReaderBasedJsonParser解析に使用しているようです。トークンの位置を取得することはできますが、トークンの位置を設定する方法が見つかりませんでした。