Java 如何在一行代码中配置JacksonJaxbJsonProvider?
我在REST应用程序中使用Jackson进行JSON序列化,如下所示:Java 如何在一行代码中配置JacksonJaxbJsonProvider?,java,json,jaxb,jackson,Java,Json,Jaxb,Jackson,我在REST应用程序中使用Jackson进行JSON序列化,如下所示: import javax.ws.rs.core.Application; import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider; import org.codehaus.jackson.map.SerializationConfig; public class MyApplication extends Application { public Se
import javax.ws.rs.core.Application;
import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
import org.codehaus.jackson.map.SerializationConfig;
public class MyApplication extends Application {
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(MyResource1.class);
classes.add(MyResource2.class);
...
return classes;
}
public Set<Object> getSingletons() {
Set<Object> singletons = new HashSet<Object>();
singletons.add(new JacksonJaxbJsonProvider().configure(
SerializationConfig.Feature.WRITE_NULL_PROPERTIES, false)); // (*)
return singletons;
}
}
导入javax.ws.rs.core.Application;
导入org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
导入org.codehaus.jackson.map.SerializationConfig;
公共类MyApplication扩展了应用程序{
public Set>classes=new HashSet我使用下一个配置和OM:
public class JaxbJacksonObjectMapper extends ObjectMapper {
public JaxbJacksonObjectMapper() {
configure(Feature.WRAP_ROOT_VALUE, false); // IMPORTANT must be false
configure(Feature.WRITE_EMPTY_JSON_ARRAYS, true);
configure(Feature.WRAP_EXCEPTIONS, true);
configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
final AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
super.getSerializationConfig().withSerializationInclusion(Inclusion.ALWAYS);
super.getDeserializationConfig()
.withAnnotationIntrospector(introspector);
super.getSerializationConfig()
.withAnnotationIntrospector(introspector);
}
}
希望能有所帮助
UPD:
对不起,我忘记了下一部分。您还需要注册它,例如:
@Provider
public final class ReContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper jacksonObjectMapper;
public ReContextResolver() throws Exception {
jacksonObjectMapper = new JaxbJacksonObjectMapper();
}
@Override
public ObjectMapper getContext(final Class<?> objectType) {
return jacksonObjectMapper;
}
}
@Provider
公共最终类ReContextResolver实现ContextResolver{
私有最终对象映射器JacksonObject映射器;
公共ReContextResolver()引发异常{
jacksonObjectMapper=新的JaxbJacksonObjectMapper();
}
@凌驾
公共对象映射器getContext(最终类objectType){
返回JacksonObject映射器;
}
}
您可以将它组合在一个类中,对我来说-我使用POJO映射和直接解析,因此对我来说更好。最后,我仍然不明白您如何使用这个新的ContextResolver
?我使用Spring,这个ContextResolver应该处于接触状态(扫描包)。这个ContextResolver注册(并替换默认值)ObjectMapper您忘了说该类应该有一个Spring注释(我选择了@Component
)由Spring自动注册。顺便说一句,谢谢您的评论@maxyme,但是注释@Provider就足够了。