java - 您可以在 JAX-RS 中全局设置 Jackon 的 Include.NON_NULL 吗?

标签 java json jackson jax-rs cxf

我有一个使用 Apache CXF 的 JAX-RS API。最近,我从 Jetison 切换到 Jackson (2.7.1) 进行 JSON 处理。我正在使用 JacksonJaxbJsonProvider。

为了帮助转换,我需要做的一件事是确保 JSON 中的空字段不会被渲染。为此,我在类级别使用以下注释:

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Book {
 ...
}

有没有办法全局设置它,这样我就不必将此注释应用于每个类?

通过 Jettison,我能够在 beans.xml 文件中指定属性,Jackson 是否可以采用类似的方法来实现 NON_NULL 行为?

  <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
    <property name="dropRootElement" value="true"/>
    <property name="supportUnwrapped" value="true"/>
  </bean>

我看到一些建议在实例化时在 ObjectMapper 级别设置此属性,但是当使用 Apache CXF 时,我从不手动创建 ObjectMapper,因为此实例化是由框架处理的(可能发生在 JacksonJaxbJsonProvider 中的某个位置)。

有没有办法全局设置 NON_NULL 属性?

最佳答案

以防万一它对其他人有帮助,在 beans.xml 中配置 ObjectMapper 与 NON_NULL 一起使用,但是我的 JAXB 注释停止工作。为了让它们同时工作,我求助于创建自己的 ObjectMapper 提供程序:

@Provider
public class CustomJacksonObjectMapperProvider implements ContextResolver<ObjectMapper> {

    final ObjectMapper defaultObjectMapper;

    public CustomJacksonObjectMapperProvider() {
        defaultObjectMapper = createDefaultMapper();
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return (defaultObjectMapper);
    }

    private static ObjectMapper createDefaultMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(Include.NON_NULL);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setAnnotationIntrospector(
            AnnotationIntrospector.pair(
                new JacksonAnnotationIntrospector(),
                new JaxbAnnotationIntrospector(mapper.getTypeFactory())
        ));
        return (mapper);
    }
}

并在 beans.xml 中(在 jaxrs:providers 下)注册它,如下所示:

<bean id="customJacksonObjectMapperProvider" class="CustomJacksonObjectMapperProvider"/>

关于java - 您可以在 JAX-RS 中全局设置 Jackon 的 Include.NON_NULL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35367366/

相关文章:

java - 如何使用捕获组作为正则表达式中的表达式的开头?

python - 谷歌应用引擎 jsonpickle

android - Spring Android REST 模板解析内容类型为 text/html 的 JSON 数据

android - 在android中解析11MB的大json

java - 为什么鉴别器属性被序列化两次?

java - 如何在 RecyclerView 中保存 "PDF "文件?

java - RuntimeException : com. google.gdata.client.authn.oauth.OAuthException:oauth_token 不存在

java - 点击推送通知时如何做一些逻辑

javascript - 从php访问json数据

c# - 将匿名类型反序列化为动态类型