0

REST API 用に Spring で Jersey を使用しており、JSON シリアライゼーションを変更するプロバイダーを作成しました。問題は、@Componentアノテーションを使用すると、プロバイダーのコールバック メソッドが他のサーブレットに対して呼び出されることです。注釈を削除する@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

どうやら、それは私の問題ではありませんでした。適切なサーブレットに対してプロバイダーが呼び出されました。
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 に答える