- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在这样的 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;
}
}
(*) 必要的否则用@XmlElementRef 注释的字段将在 JSON 输出中显示为 "myField": null
当 null 时(而不是不出现),而用 @XmlElement 注释的字段很好。
然而,SerializationConfig.Feature.WRITE_NULL_PROPERTIES
的使用已被弃用,取而代之的是 SerializationConfig.setSerializationInclusion(..)
(1)它本身已被弃用,取而代之的是 SerializationConfig.withSerializationInclusion(..)
或通过 ObjectMapper 配置 (2)
但我认为使用 new JacksonJaxbJsonProvider().configure(..)
确实是在配置一个 ObjectMapper(我看了一下代码)。
所以我的问题是:如何在不使用任何已弃用的属性且不(重新)创建新的配置类的情况下正确配置它?
最佳答案
我使用下一个配置和 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);
}
}
希望对你有帮助
更新:对不起,我忘了下一部分。您还需要注册它,例如:
@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;
}
}
你可以把它合并到一个类中,对我来说——我使用 POJO 映射和直接解析,所以对我来说它更好。
关于java - 如何在一行代码中配置 JacksonJaxbJsonProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14704959/
我是一名优秀的程序员,十分优秀!