Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在一行代码中配置JacksonJaxbJsonProvider?_Java_Json_Jaxb_Jackson - Fatal编程技术网

Java 如何在一行代码中配置JacksonJaxbJsonProvider?

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

我在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 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就足够了。