如何让jackson Include.NON_NULL与spring4的@RestController一起使用?

时间:2017-01-28 18:14:47

标签: spring spring-mvc

我尝试了4个小时,有人知道如何使它有效吗?

我尝试在servlet.xml中写这些:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="prefixJson" value="true"/>
            <property name="supportedMediaTypes" value="application/json"/>
            <property name="objectMapper">
                <bean class="com.fasterxml.jackson.databind.ObjectMapper">
                    <property name="serializationInclusion" value="NON_NULL"/>
                </bean>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

根本不起作用。 我读了spring的源代码,并在eclipse中调试它。 它使用的messageConverter是由RequestResponseBodyMethodProcessor构造的Object#RequestResponseBodyMethodProcessor(List&gt; messageConverters,ContentNegotiationManager contentNegotiationManager,List responseBodyAdvice)

我跟踪代码,上面的构造由RequestMappingHandlerAdapter#getDefaultReturnValueHandlers()调用,在设置自定义我的messageConverter之前调用Method。 所以上面的设置不起作用。

天啊,我怎么能让它有用?

1 个答案:

答案 0 :(得分:0)

自Jackson 2.0以来,你可以在你的pojo中使用@JsonInclude。

@JsonInclude(Include.NON_NULL)
public class Pojo{

}