在 JavaEE 应用程序中注册 Jackson MixIn

Register Jackson MixIn in JavaEE application

(using Jackson as JAXB-provider in a JavaEE application): How can I register my MixIn modules的基础上?

在我使用 JAX-RS 客户端功能的客户端应用程序中,它是自动注册的。我见过 this SO post,但是我从哪里得到 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