I have a deserializer for a specific class which needs some ordering while reading fields.
Let's say I have two fields in my class (field1
and field2
) and in order to read field2
, it first needs field1
.
For example for the following json data it works because when the deserializer parses field2
, field1
is already set:
{"field1": 3, "field2": 4}
However if we reverse the fields:
{"field2": 4, "field1": 3}
I need to skip field2
via jp.skipChildren
because field1
is not set. When field1
is parsed, Jackson should re-read and parse field2
.
One option is to parse field2 instead of skipping and hold it in a variable so that when field1 is set, it can use the variable that holds data in field2. However; based on the value of field1
, I may not need to parse field2
so I'm looking for a better solution since performance is critical in this part of the code.
I'm using Mapper.readValue(byte[], MyClass.class)
method and it seems Jackson uses ReaderBasedJsonParser
for parsing. Even though it's possible to get token position, I couldn't find a way to set token position.