我正在使用Jersey和Spring作为REST API,我编写了一个提供程序来修改JSON序列化。问题是当我使用@Component
注释时,为其他servlet调用提供者的回调方法。当我删除@Component
注释时,根本不会调用它。
这是提供者:
@Component
@Provider
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
public ObjectMapperProvider() {
}
@Override
public ObjectMapper getContext(Class<?> type) {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule("SimpleModule", new org.codehaus.jackson.Version(1, 0, 0, null));
module.addSerializer(BigInteger.class, new ToStringSerializer());
objectMapper.registerModule(module);
return objectMapper;
}
}
我尝试在web.xml中使用Jersey配置,但这也没有帮助。
有什么想法吗?
答案 0 :(得分:0)
显然,这不是我的问题。提供者被调用了正确的servlet。
我的应用程序没有用,因为我有一个XmlAdapter for Map,而我的ObjectMapperProvider,json响应是不同的。
这是我更新的ObjectMapperProvider类:
@Provider
public class ObjectMapperProvider implements ContextResolver<ObjectMapper> {
@Context
UriInfo uriInfo;
public ObjectMapperProvider() {
}
@Override
public ObjectMapper getContext(Class<?> type) {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule("SimpleModule", new org.codehaus.jackson.Version(1, 0, 0, null));
module.addSerializer(BigInteger.class, new ToStringSerializer());
objectMapper = objectMapper.configure(Feature.WRAP_ROOT_VALUE, false).configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, false)
.configure(Feature.WRAP_EXCEPTIONS, true).configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, true).configure(Feature.WRITE_EMPTY_JSON_ARRAYS, false);
final AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
objectMapper.getDeserializationConfig().setAnnotationIntrospector(introspector); // using a deprecated API that works. Non-deprecated API doesn't work...
objectMapper.getSerializationConfig().setAnnotationIntrospector(introspector);
objectMapper.registerModule(module);
return objectMapper;
}
}
一旦我配置了我的Object包装器以使用JAXB注释,一切都按预期工作。我从以下post
中了解了如何做到这一点