フィールドの読み取り中に順序付けが必要な特定のクラスのデシリアライザーがあります。クラスに 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
解析に使用しているようです。トークンの位置を取得することはできますが、トークンの位置を設定する方法が見つかりませんでした。