0

我将 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 配置,但这也无济于事。
有任何想法吗?

4

1 回答 1

0

显然,那不是我的问题。为正确的 servlet 调用了提供程序。
我的应用程序没有工作,因为我有一个用于 Map 的 XmlAdapter,并且使用我的 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;   
    }

} 

一旦我将我的对象包装器配置为使用 JAXB 注释,一切都按预期工作。我从以下帖子中得到了如何做到这一点的想法

于 2013-09-30T13:45:25.707 回答