On Fri, Aug 18, 2017 at 2:58 PM, Vladimir <[email protected]> wrote:
> Tatu,
>
> Thank you for your response.
>
> My goal was to delegate some deserialization inside of my custom
> deserializer to the Jacksons default deserializer, which is aware of other
> registered deserializers for a given type.
> So in my example, I wanted to pass on the Jail treenode the Jacksons default
> deserializer and let Jackson figure out which other registered deserializer
> to use.

Then you need to find the deserializer through
`DeserializationContext`, giving target type.
This can be done either from `deserialize()`, or from initial call to
`resolve()`.

-+ Tatu +-

>
>
>
> On Friday, August 18, 2017 at 4:38:24 PM UTC-4, Tatu Saloranta wrote:
>>
>> On Fri, Aug 18, 2017 at 1:32 PM, Vladimir <[email protected]> wrote:
>> >
>> > I implement the ResolvableDeserializer within my custom deserializer,
>> > which
>> > gives me the reference to the default JsonDeserializer<?>.
>> > Id like to invoke the default deserializer on the "Jail" JsonNode to
>> > return
>> > to me a Jail object
>> >
>> > public class BadStudentDeserializer extends StdDeserializer<BadStudent>
>> >     implements ResolvableDeserializer{
>> >   private static final long serialVersionUID = 1L;
>> >   private JsonDeserializer<?> defaultDeserializer;
>> >
>> >
>> >   public BadStudentDeserializer(JsonDeserializer<?> defaultDeserializer)
>> > {
>> >     super(BadStudent.class);
>> >     this.defaultDeserializer = defaultDeserializer;
>> >   }
>> >
>> >   @Override
>> >   public BadStudent deserialize(JsonParser p, DeserializationContext
>> > ctxt)
>> >       throws IOException, JsonProcessingException {
>> >     JsonNode jsonTree = p.getCodec().readTree(p);
>> >
>> >     String id = jsonTree.get("id").asText();
>> >     String weapon = jsonTree.get("weapon").asText();
>> >     JsonNode jailNode = jsonTree.get("jail");
>> >     JsonParser jailNodeParser = jailNode.traverse();
>> >     //advance it as per documentation
>> >     jailNodeParser.nextToken();
>> >     //this doesnt work
>> >     Jail jail = (Jail)defaultDeserializer.
>> >         deserialize(jailNodeParser, ctxt);
>> >     return new BadStudent(id, weapon, jail);
>> >   }
>> >
>> >
>> >   @Override
>> >   public void resolve(DeserializationContext ctxt) throws
>> > JsonMappingException {
>> >     ((ResolvableDeserializer) defaultDeserializer).resolve(ctxt);
>> >
>> >   }
>> >
>> >
>> >
>> >
>> > How do I provide the defaultDeserializer a clue as to what class TYPE a
>> > tree
>> > node is, so that it can pick up the right deserializer or that treeNode?
>> >
>> > Hope I am able to explain myself clearly.
>>
>> `JsonNode` has methods (`isObject()`, `isArray()`), if you are
>> interested in type of json node read.
>> But just looking at naming, it seems odd that you would delegate
>> contents of `jail` to default POJO
>> deserializer that would be used for `BadStdudent`?
>>
>> -+ Tatu +-
>>
>>
>> >
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups
>> > "jackson-user" group.
>> > To unsubscribe from this group and stop receiving emails from it, send
>> > an
>> > email to [email protected].
>> > To post to this group, send email to [email protected].
>> > For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "jackson-user" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to