1. 程式人生 > >SpringmvcJSON轉換器MappingJackson2HttpMessageConverter設定對值為null的處理

SpringmvcJSON轉換器MappingJackson2HttpMessageConverter設定對值為null的處理

我們在使用springmvc中的 @ResponseBody 註解返回JSON時可以配置Json轉換器如下:

<!-- 請求資訊轉換器,負責讀取和寫入json格式的資料 -->
<bean id="mappingJackson2HttpMessageConverter"
	class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
	<property name="supportedMediaTypes">
		<list>
			<value>application/json;charset=UTF-8</value>
		</list>
	</property>
</bean>

有時我們返回的欄位存在null的情況我們需要對其進行處理,objectMapper提供了預設的幾種處理方式配置如下:

<bean id="mappingJacksonHttpMessageConverter"  
        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>application/json;charset=UTF-8</value>  
            </list>  
        </property>  
        <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>  

這種是將欄位為null的清理掉不在結果Json中顯示出來,其餘的還有以下幾種配置:

        ALWAYS,  NON_NULL,   NON_DEFAULT, NON_EMPTY

有些特殊情況,我們不能將null欄位直接去除,而是需要給予一個預設的值,則可以設定如下配置:

<bean id="mappingJacksonHttpMessageConverter"  
    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
    <property name="supportedMediaTypes">  
        <list>  
            <value>application/json;charset=UTF-8</value>  
        </list>  
    </property>  
    <property name="objectMapper">  
        <bean class="com.fasterxml.jackson.databind.ObjectMapper">  
            <property name="serializerProvider">  
                <bean class="com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.Impl">  
                    <property name="nullValueSerializer">  
                        <bean class="cn.com.mx.gome.flash.component.GomeSearchJsonSerializer"></bean>  
                    </property>  
                </bean>  
            </property>  
        </bean>  
    </property>  
</bean>  

自定義的null處理類如下;

import java.io.IOException;  
import java.util.ArrayList;  
import java.util.List;  
  
import com.fasterxml.jackson.core.JsonGenerator;  
import com.fasterxml.jackson.core.JsonProcessingException;  
import com.fasterxml.jackson.databind.JsonSerializer;  
import com.fasterxml.jackson.databind.SerializerProvider;  
  
public class GomeSearchJsonSerializer extends JsonSerializer<Object> {  
  
    @Override  
    public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider)  
            throws IOException, JsonProcessingException {  
//        jgen.writeString("");  
        jgen.writeObject(new JsonNullDef());  
    }  
  
}  
  
class JsonNullDef{  
      
    private List<String> def = new ArrayList<>();  
  
    public List<String> getDef() {  
        return def;  
    }  
  
    public void setDef(List<String> def) {  
        this.def = def;  
    }    
      
}  

大家可以根據自己的需求來設定null的自定義值.