Jackson 轉換JSON,SpringMVC ajax 輸出,當值為null或者空不輸出欄位@JsonInclude
阿新 • • 發佈:2018-12-11
當我們提供介面的時候, Ajax 返回的時候,當物件在轉換 JSON (序列化)的時候,值為Null
或者為“”
的欄位還是輸出來了。看上去不優雅。
現在我敘述三種方式來控制這種情況。
註解的方式( @JsonInclude(JsonInclude.Include.NON_EMPTY))
通過@JsonInclude
註解來標記,但是值的可選項有四類。
- Include.Include.ALWAYS (
Default
/ 都參與序列化) - Include.NON_DEFAULT
Value
為預設值的時候不參與,如Int a;
當a=0
的時候不參與) - Include.NON_EMPTY(當
Value
為“”
或者null
不輸出) - Include.NON_NULL(當
Value
為null
不輸出)
註解使用如下:
... ...
//如果是null 和 “” 不返回
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private T data;
... ...
我的物件定義(其實就是一個API介面的返回物件):
public class APIResult<T> implements Serializable {
//狀態
private Integer status;
//描述
private String message;
//如果是null 不返回
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private T data;
/*** getter / setter***/
}
我的前端返回值:
{"status":200,"message":"success"}
如上,基本達到我的要求了。
程式碼方式:
ObjectMapper mapper = new ObjectMapper();
//null不序列化
mapper.setSerializationInclusion(Include.NON_NULL);
Demo demo = new Demo(200,"",null);
String json = mapper.writeValueAsString(demo);
System.out.println(json);
//結果:{"st":200,"name":""} 為null的屬性沒輸出。
Spring配置檔案實現
當我們整個專案都需要某一種規則的時候,那麼我們就採用配置檔案配置。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
再來一個XML配置:
<bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="serializationInclusion">
<value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value>
</property>
</bean>
<mvc:annotation-driven>
<mvc:message-converters>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper" ref="objectMapper" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
其實所有的姿勢都是針對 Jackson 提供給我們的入口“JsonInclude.Include”
來處理的。所以只要記住最上面講的幾個級別就可以了。