在 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
在
在我使用 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