Unfortunately handling of TypeIdResolver is quite strongly coupled
with that of `TypeResolverBuilder`, and your best route would probably
be via annotation introspector. Although I actually like your approach
above: did not know it would actually work (I spent some time back in
the day trying to figure out if implementing annotation types via
non-annotation declaration works... didn't think it did).

Anyway, method to override would be

    public TypeResolverBuilder<?> findTypeResolver(MapperConfig<?> config,
            AnnotatedClass ac, JavaType baseType) { }

and you should be able to just use base implementation, but call
`init(...)` on builder instance if one found, to override default
resolver.

This is not optimal of course.

One more existing facility is method

    public ObjectMapper setDefaultTyping(TypeResolverBuilder<?> typer) { ... }

in ObjectMapper. This does let you control all type id aspects,
including type id resolution, but is quite a bit of work.

-+ Tatu +-


On Tue, Nov 29, 2016 at 5:40 AM, Paolo Bazzi <paolo.ba...@gmail.com> wrote:
> Hi,
>
> I have a question regarding a custom TypeIdResolver. Is there a possibility
> to register a custom TypeIdResolver class or instance on the used
> ObjectMapper instance, without having to annotate the serialized beans with
> @JsonTypeIdResolver annotation?
>
> Background information: We use the serialized beans as interface between
> multiple systems and do not wan't to have a dependency to jackson-databind
> on the maven module providing the interface beans. Instead we would prefer
> to have the dependendy to jackson-databind only within the code, which
> actually performs the serialization/deserialization.
>
>
> A rather hacky workaround would be to intercept the AnnotationIntrospector
> as follow. But a programmatic way to register the custom TypeIdResolver
> would be preferred.
>
>
>     ObjectMapper mapper = new ObjectMapper();
>
>     mapper = mapper.setAnnotationIntrospector(new
> JacksonAnnotationIntrospector() {
>       private static final long serialVersionUID = 1L;
>
>       @SuppressWarnings("unchecked")
>       @Override
>       protected <A extends Annotation> A _findAnnotation(Annotated
> annotated, Class<A> annoClass) {
>         A annotation = super._findAnnotation(annotated, annoClass);
>         if (JsonTypeIdResolver.class.equals(annoClass) && annotation ==
> null) {
>           return (A) new JsonTypeIdResolver() {
>             @Override
>             public Class<? extends Annotation> annotationType() {
>               return JsonTypeIdResolver.class;
>             }
>
>             @Override
>             public Class<? extends TypeIdResolver> value() {
>               return CustomTypeNameIdResolver.class;
>             }
>           };
>         }
>         return annotation;
>       }
>     });
>
>
> Regards,
> Paolo
>
> --
> 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 jackson-user+unsubscr...@googlegroups.com.
> To post to this group, send email to jackson-user@googlegroups.com.
> 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 jackson-user+unsubscr...@googlegroups.com.
To post to this group, send email to jackson-user@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to