Spring Boot微服务Jackson JSON序列化NON NULL

时间:2016-01-05 18:27:58

标签: json spring serialization jackson

我目前正在开发一个Spring Boot(版本1.3.1)微服务,它连接到MongoDB后端,并通过控制器向客户端提供后端数据(Ex:Provider对象)。

项目有一个扩展ResourceSupport(Ex:ProviderResourceSupport)的类文件,还有另一个扩展ResourceSupportAssembler类(Ex:ProviderAssembler)的类,用于生成到Response对象的链接。

理想情况下,我的要求是根据需要自定义JSON对象,并使用@JsonView(遵循此链接 - https://spring.io/blog/2014/12/02/latest-jackson-integration-improvements-in-spring)并在maven项目中添加Spring Jackson依赖项。

我还添加了spring.jackson.serialization-inclusion = non-null& application.properties中的spring.jackson.serialization.indent_output = true。

对于控制器中的一个方法,响应将是'ResponseEntity<列表与LT; ProviderResourceSupport>>” ,如果数据不存在,则此方法返回“null”响应。

我已经在我的实体对象和控制器上添加了@JsonInclude(Include = NON_NULL)但仍然获得了'null'响应。

我不希望'null'作为回复,如果有人遇到类似的问题,请求你帮助我。

1 个答案:

答案 0 :(得分:0)

我修复了这个null属性,从json响应中扩展了Jackson Mapper Bean,但是我没有使用Spring Boot,快速查看并检查它是否适合你

public class Jackson2ObjectMapperCustom extends Jackson2ObjectMapperFactoryBean {

    @Override
    public void afterPropertiesSet() {
        super.afterPropertiesSet();

        getObject().setSerializationInclusion(JsonInclude.Include.NON_NULL).setSerializationInclusion(JsonInclude.Include.NON_EMPTY);

        Hibernate5Module hibernateModule = new Hibernate5Module();
        hibernateModule.disable(Feature.USE_TRANSIENT_ANNOTATION);
        hibernateModule.enable(Feature.FORCE_LAZY_LOADING);
        getObject().registerModules(new JavaTimeModule(), hibernateModule);
        getObject().configure(SerializationFeature.INDENT_OUTPUT, true);
        getObject().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        getObject().setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"));
    }
}

在我的情况下,我使用Spring Xml配置

<bean id="objectMapper" class="com.xxx.common.Jackson2ObjectMapperCustom" />

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
        <bean class="org.springframework.http.converter.ResourceHttpMessageConverter"/>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper" ref="objectMapper"/>
        </bean>
    </mvc:message-converters>       
</mvc:annotation-driven>