JAX-RS2.0:如何注册Feature或ContextResolver,以便在Mapper中注册自定义JaxbAnn



我已经使用在我的JAX-RS 2.0应用程序中正确注册了JacksonJaxbJsonProvider

public Set<Class<?>> getClasses() {
... classes.add(com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider.class);
}

现在我需要自定义它自己在JAX-RS资源中使用的Mapper,因为我需要添加SerializationFeature.FAIL_ON_EMPTY_BEANS.

我看到了如何使用Feature或自定义Contextresolver来实现这一点的示例,但我知道如何将其添加到我在源代码中创建的Mapper中,但我无法使用将它添加到REST服务使用的Mapper

classes.add(ObjectMapperContextResolver.class);
classes.add(MarshallingFeature.class);

因为JAX-RS2.0应用程序忽略了这些类。

如何在JAX-RS应用程序中添加Feature或ContextResolver以便识别它们?

您可以重用Jersey实现自定义应用程序。更多信息并使用ContextResolver获取要使用的自定义ObjectMapper。

示例:

public class MyApplication extends ResourceConfig {
public MyApplication() {
/* packages that contains JAX-RS components, registers them to use also */
packages("org.foo.rest;org.bar.rest");
/* here register the provider */
register(MapperProvider.class);
}

}

MapperProvider类。

@Provider
public class MapperProvider implements ContextResolver<ObjectMapper> {
@Override
public ObjectMapper getContext(Class<?> arg0) {
/* you can configure the mapper as you like */
return new ObjectMapper()
.registerModule(new JaxbAnnotationModule()
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false));
}

最新更新