Thanks again for such a detailed advice! I sincerely appreciate the effort. Very helpful!
On Tuesday, December 26, 2017 at 10:02:21 PM UTC+1, Tatu Saloranta wrote: > > On Mon, Dec 25, 2017 at 12:16 PM, Bojan Tomic <[email protected] > <javascript:>> wrote: > > The subject line is pretty much the whole question: can ObjectMapper be > > accessed from JsonDeserializer#deserialize in any way at all? > > There is, although it's bit obscure and for a good reason: you should > not do that, at all (*), > if possible. And generally it is possible. > > If you do want to do it, nonetheless, the route is via `JsonParser` > and method `getCodec()`, > which can be case as `ObjectMapper`, safely. But as per above, it's > the last resort if everything else fails. > > > If it is absolutely out of the question (and only in that case), is it > > possible to achieve an equivalent of: ObjectMapper#readValue(String, > > JavaType) using JsonParser and/or DeserializationContext? How about > > ObjectMapper#convertValue(Object, JavaType)? > > The way deserializers are designed to work is to use delegation to > other deserializers. > Access to these is via `DeserializationContext`: either during > initialization (usually method `createContextual()` > when deserializer implements `ContextualDeserializer`), or at runtime, > during `deserialize()` call. > Former is significantly more efficient as access is only done once > during construction: but it may not matter > a lot in specific cases. > > Either way, method to use varies depending on details, there are > multiple `findXxxDeserializer()` calls: but if > you have no special configurations or customizations to worry about, > `findContextualValueDeserializer` is probably > the best (from `createContextual()` directly, or if you have stored > ref to BeanProperty, during runtime). > Another possibility is just using `findRootValueDeserializer()`, which > only requires type and as such is easier to > call from `deserialize()` directly. > > I hope this helps, > > -+ Tatu +- > > (*) Why not do that? `ObjectMapper` has no context of currently active > deserialization, like Attributes set, or > even some of configuration. It has to create such context, adding > overhead and possibly losing information you need. > This may or may not be problematic for custom types (or non-structured > standard types like `String`, numbers). > So you are basically missing the active `DeserializationContext` and > that can have side effects. > -- 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.
