SpringmvcJSON轉換器MappingJackson2HttpMessageConverter設定對值為null的處理
阿新 • • 發佈:2019-01-27
我們在使用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的自定義值.