@JsonProperty用法:
@JsonProperty 此注解用於屬性上,作用是把該屬性的名稱序列化為另外一個名稱,如把trueName屬性序列化為name,@JsonProperty(“name”),
這樣得到結果
{“name”:“張三”}
@jsonSerialize用法:
實際開發中,我們一定遇到過這樣的問題:前端顯示和后台存儲數據單位不統一,而且各有各自的理由,統一不了,那就轉換吧。
每次返回給前端時再轉換一遍,返回給前端的json數據,在后端里定義的往往是一個對象,如何做到優雅的轉換呢?只需兩步
1. 寫一個負責轉換的類,里面寫好規則
2. 在實體類上需要裝換的字段上加上注解
這樣就成功將Date類型轉換為Long類型輸出了。
@JsonSerialize注解,主要用於數據轉換,該注解作用在該屬性的getter()方法上。
@JsonIgnoreProperties
此注解是類注解,作用是json序列化時將java bean中的一些屬性忽略掉,序列化和反序列化都受影響。
寫法將此標簽加在model 類的類名上 ,可以多個屬性也可以單個屬性
//生成json時將name和age屬性過濾
@JsonIgnoreProperties({"name"},{"age"})
public class user {
private String name;
private int age;
}
@JsonIgnore
此注解用於屬性或者方法上(最好是屬性上),作用和上面的@JsonIgnoreProperties一樣。
生成json 時不生成age 屬性
public class user {
private String name;
@JsonIgnore
private int age;
}
@JsonFormat
此注解用於屬性或者方法上(最好是屬性上),可以方便的把Date類型直接轉化為我們想要的模式,比如@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)
@Transient
ORM框架將忽略該屬性;
如果一個屬性並非數據庫表的字段映射,就務必將其標示為@Transient,否則ORM框架默認其注解為@Basic;
@JsonInclude
前端的同事要求說盡量不要有null,可有為空串“” 或者 0 或者 [], 但盡量不要nul,
所以@JsonInclude(Include.NON_NULL) 這個注解放在類頭上就可以解決。 實體類與json互轉的時候 屬性值為null的不參與序列化
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
@JsonInclude(Include.NON_NULL)
public class WithdrawDetail implements Serializable {
}
實際效果
全局配置
springMVC.xml
<!-- 默認的注解映射的支持 比如requestMapper之類的 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<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>
--------------spring boot 的配置
只在配置文件加上一個配置
spring.jackson.default-property-inclusion=non_null