對(duì)象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性
FastJson轉(zhuǎn)Json字符串時(shí),忽略指定屬性
使用注解@JSONField
以下Bean
package com.gomefinance.esign; import com.alibaba.fastjson.annotation.JSONField; import lombok.Getter; import lombok.Setter; import java.io.Serializable; /** * 本地簽署信息 * Created by JHAO on 2017/5/31. */ @Setter @Getter public class FastJsonInputBean implements Serializable { // 合同模板ID private String contractTemplateId; // 合同號(hào) private String contractId; // Base64編碼的合同 @JSONField(serialize = false) private String contractImage; private String contractVersion; }
FastJsonInputBean inputBean = new FastJsonInputBean(); inputBean.setContractImage("contractImage"); inputBean.setContractTemplateId("templateId"); inputBean.setContractId("comtractId"); inputBean.setContractVersion("contractVersion"); System.out.println("JSONField(serialize = false)忽略contractImage屬性:"+JSON.toJSONString(inputBean));
打印結(jié)果:
{"contractId":"comtractId","contractTemplateId":"templateId","contractVersion":"contractVersion"}
Filter指定序列化的字段
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(FastJsonInputBean.class, "contractTemplateId"); System.out.println("filter忽略contractTemplateId屬性:"+JSONObject.toJSONString(inputBean, filter));?
打印結(jié)果:
{"contractTemplateId":"templateId"}
JackSon忽略字段
@JsonIgnoreProperties主鍵或者在字段上使用@JsonIgnore
package com.gomefinance.esign; import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Getter; import lombok.Setter; import java.io.Serializable; /** * 本地簽署信息 * Created by JHAO on 2017/5/31. */ @Setter @Getter @JsonIgnoreProperties({"contractTemplateId", "contractImage"}) public class JackSonInputBean implements Serializable { // 合同模板ID private String contractTemplateId; // 合同號(hào) @JsonIgnore private String contractId; // Base64編碼的合同 private String contractImage; private String contractVersion; }
JackSonInputBean jackSonInputBean = new JackSonInputBean(); jackSonInputBean.setContractImage("contractImage"); jackSonInputBean.setContractTemplateId("templateId"); jackSonInputBean.setContractId("comtractId"); jackSonInputBean.setContractVersion("contractVersion"); ObjectMapper objectMapper = new ObjectMapper(); System.out.println("JackSon JsonIgnore忽略contractId屬性:"+objectMapper.writeValueAsString(jackSonInputBean));
打印結(jié)果:
{"contractVersion":"contractVersion"}
Jackson Json與對(duì)象轉(zhuǎn)換的幾個(gè)配置筆記
最近因?yàn)轫?xiàng)目需要,對(duì)Jackson的使用進(jìn)行了深入的學(xué)習(xí),總結(jié)了幾條使用心得,在此記錄一下:
在做Json字符串轉(zhuǎn)換為對(duì)象時(shí),有時(shí)會(huì)出現(xiàn)對(duì)象中存在某屬性,而json字符串沒(méi)有此屬性,缺省情況下會(huì)拋出異常。
可通過(guò)以下兩種方式配置不拋出異常:
- application.properties中進(jìn)行全局配置:spring.jackson.deserialization.fail_on_unknown_properties=false
- 針對(duì)需要配置對(duì)象類,添加注解: @JsonIgnoreProperties(ignoreUnknown = true)
java類的屬性,一般是小駝峰模式,如testStr。在轉(zhuǎn)換為Json字符串時(shí),可以控制json中屬性的命名方式,如大駝峰,小駝峰,蛇形(下劃線),不變等。
全局配置屬性spring.jackson.property-naming-strategy
UPPER_CAMEL_CASE
- 大駝峰 (TestStr)LOWER_CAMEL_CASE
- 小駝峰 (testStr)SNAKE_CASE
- 下劃線 (test_str)LOWER_CASE
- 小寫(xiě) (teststr)KEBAB_CASE
- 減號(hào) (test-str)
針對(duì)指定對(duì)象,添加注解@JsonNaming(PropertyNamingStrategy.???.class)
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
- 大駝峰@JsonNaming(PropertyNamingStrategy.LowerDotCaseStrategy.class)
- .分隔 test.str@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
- 下劃線@JsonNaming(PropertyNamingStrategy.LowerCaseStrategy.class)
- 小寫(xiě)@JsonNaming(PropertyNamingStrategy.KebabCaseStrategy.class)
- 減號(hào)
其中有一點(diǎn)需要注意,對(duì)于從json字符串轉(zhuǎn)換為實(shí)體對(duì)象時(shí),即使設(shè)置了大駝峰等模式,使用對(duì)象屬性名,也可以解析成功,即TestStr, testStr均可解析成功。
空屬性是否序列化
全局配置spring.jackson.default-property-inclusion=non_null
non_null
: null不解析non_empty
: 空字符’'和null均不解析
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java 中HashMap、HashSet、TreeMap、TreeSet判斷元素相同的幾種方法比較
這篇文章主要介紹了從源碼的角度淺析HashMap、TreeMap元素的存儲(chǔ)和獲取元素的邏輯;從Map與Set之間的關(guān)系淺析常用的Set中元素的存儲(chǔ)和判斷是否重復(fù)的邏輯,需要的朋友可以參考下2017-01-01Java Chassis3過(guò)載狀態(tài)下的快速失敗解決分析
本文解密了Java Chassis 3快速失敗相關(guān)的機(jī)制和背后故事,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01淺析javax.servlet.Servlet,ServletContext接口
本篇文章是對(duì)javax.servlet.Servlet,ServletContext接口進(jìn)行了纖細(xì)的分析介紹,需要的朋友參考下2013-07-07Springboot簡(jiǎn)單熱部署實(shí)現(xiàn)步驟解析
這篇文章主要介紹了Springboot簡(jiǎn)單熱部署實(shí)現(xiàn)步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12java 合并排序算法、冒泡排序算法、選擇排序算法、插入排序算法、快速排序算法的描述
算法是程序設(shè)計(jì)的精髓,程序設(shè)計(jì)的實(shí)質(zhì)就是構(gòu)造解決問(wèn)題的算法,將其解釋為計(jì)算機(jī)語(yǔ)言。2009-06-06Mybatis配置之typeAlias標(biāo)簽的用法
這篇文章主要介紹了Mybatis配置之typeAlias標(biāo)簽的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07使用java獲取指定鏈接的網(wǎng)頁(yè)內(nèi)容
Java提供了許多用于網(wǎng)絡(luò)通信的庫(kù),其中最常用的是HttpURLConnection和HttpClient,本文將使用HttpURLConnection進(jìn)行爬取指定鏈接的網(wǎng)頁(yè)內(nèi)容,感興趣的可以了解下2023-09-09java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點(diǎn)
這篇文章主要介紹了java用靜態(tài)工廠代替構(gòu)造函數(shù)使用方法和優(yōu)缺點(diǎn),需要的朋友可以參考下2014-02-02