Jakarta ee 在JavaEE应用程序中注册jacksonmixin

Jakarta ee 在JavaEE应用程序中注册jacksonmixin,jakarta-ee,jaxb,jackson,jax-rs,mixins,Jakarta Ee,Jaxb,Jackson,Jax Rs,Mixins,在JavaEE应用程序中使用Jackson作为JAXB提供者的基础上:如何注册我的JAXB 在使用JAX-RS客户机特性的我的客户机应用程序中,它是自动注册的。我看到了,但是我从哪里获得ObjectMapper?我已经尝试在ServletContextListener中创建并在那里注册模块。当然,映射器实例将在contextInitialized方法结束后被释放。使用ContextResolver,如中所示。使用@Provider注释,应该从扫描中提取ContextResolver,假设您使用的

在JavaEE应用程序中使用Jackson作为JAXB提供者的基础上:如何注册我的JAXB

在使用JAX-RS客户机特性的我的客户机应用程序中,它是自动注册的。我看到了,但是我从哪里获得ObjectMapper?我已经尝试在ServletContextListener中创建并在那里注册模块。当然,映射器实例将在contextInitialized方法结束后被释放。

使用ContextResolver,如中所示。使用@Provider注释,应该从扫描中提取ContextResolver,假设您使用的是某种扫描;包扫描或类路径扫描

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {

    final ObjectMapper mapper = new ObjectMapper();

    public ObjectMapperContextResolver() {
        mapper.registerModule(new MixinModule());
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return defaultMapper;
    }  
}

发生的情况是,Jackson JAX-RS提供商提供的MessageBodyReader/MessageBodyWrite将调用getContext方法,以获取ObjectMapper

非常感谢@peeskillet