为了减少不必要的内容传输, 过滤null字段,可对返回的类加入注释来解决。
条件:
1. spring MVC 3.X 支持注解
2. jackson-code.jar,jackson-mapper.jar 通常用jackson-all-xxx.jar 就行了
使用:
在需要序列化为json输出的类上增加, 例如:
import org.codehaus.jackson.map.annotate.JsonSerialize;
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class XXXX{
}
官方说明
@deprecated As of Jackson 2.0, this annotation has been replaced
* by {@link com.fasterxml.jackson.annotation.JsonInclude}
改成:
@JsonInclude(Include.NON_NULL)
public class XXXX{
}
如果要全局配置可参考:
<mvc:message-converters register-defaults="true">
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="prefixJson" value="false" />
<property name="supportedMediaTypes" value="application/json" />
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="serializationInclusion">
<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
<mvc:annotation-driven>
<!-- 强化参数接收 -->
<mvc:argument-resolvers>
<bean class="org.durcframework.common.form.FormModelMethodArgumentResolver" />
</mvc:argument-resolvers>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<!-- 处理responseBody 里面日期类型 -->
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
<!-- 为null字段时不显示 -->
<property name="serializationInclusion">
<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
</property>
</bean>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
全局配置有个问题是,本来就该为null值,在结果中就找不到了,不利于调试。