次の方法でJSONを逆シリアル化するカスタムデシリアライザを実装しました。 mapper.treeToValueはコードを無限に呼び出しています。Jsonカスタムデシリアライザが無限再帰でスタック
public class MyDeserializer extends StdDeserializer<MyResource> {
@Override
public myResourcedeserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {
MyResource resource = null;
Class<? extends MyResource > clazz = null;
ObjectMapper mapper = (ObjectMapper) parser.getCodec();
ObjectNode node = (ObjectNode) mapper.readTree(parser);
Iterator<Map.Entry<String, JsonNode>> elementsIterator = node.fields();
while (elementsIterator.hasNext()) {
Map.Entry<String, JsonNode> element = elementsIterator.next();
if(element.getKey().equals("typeId"))
{
if(element.getValue().asInt() == 1)
{
clazz = SpecificResource.class;
break;
}
}
}
return mapper.treeToValue(node,clazz);
}
mapper.treeToValueを実行した後、制御は再びmyResourcedeserialize方法及びそれを倍の無限の実行とにStackOverflowErrorを引き起こす進みます。
お願いします。