本篇內容介紹了“對象轉Json字符串時怎么忽略指定屬性”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
使用注解@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; // 合同號 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));
打印結果:
{"contractId":"comtractId","contractTemplateId":"templateId","contractVersion":"contractVersion"}
Filter指定序列化的字段
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(FastJsonInputBean.class, "contractTemplateId"); System.out.println("filter忽略contractTemplateId屬性:"+JSONObject.toJSONString(inputBean, filter));
打印結果:
{"contractTemplateId":"templateId"}
@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; // 合同號 @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));
打印結果:
{"contractVersion":"contractVersion"}
最近因為項目需要,對Jackson的使用進行了深入的學習,總結了幾條使用心得,在此記錄一下:
在做Json字符串轉換為對象時,有時會出現對象中存在某屬性,而json字符串沒有此屬性,缺省情況下會拋出異常。
可通過以下兩種方式配置不拋出異常:
application.properties中進行全局配置:spring.jackson.deserialization.fail_on_unknown_properties=false
針對需要配置對象類,添加注解: @JsonIgnoreProperties(ignoreUnknown = true)
java類的屬性,一般是小駝峰模式,如testStr。在轉換為Json字符串時,可以控制json中屬性的命名方式,如大駝峰,小駝峰,蛇形(下劃線),不變等。
全局配置屬性spring.jackson.property-naming-strategy
UPPER_CAMEL_CASE
- 大駝峰 (TestStr)
LOWER_CAMEL_CASE
- 小駝峰 (testStr)
SNAKE_CASE
- 下劃線 (test_str)
LOWER_CASE
- 小寫 (teststr)
KEBAB_CASE
- 減號 (test-str)
針對指定對象,添加注解@JsonNaming(PropertyNamingStrategy.???.class)
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
- 大駝峰
@JsonNaming(PropertyNamingStrategy.LowerDotCaseStrategy.class)
- .分隔 test.str
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
- 下劃線
@JsonNaming(PropertyNamingStrategy.LowerCaseStrategy.class)
- 小寫
@JsonNaming(PropertyNamingStrategy.KebabCaseStrategy.class)
- 減號
其中有一點需要注意,對于從json字符串轉換為實體對象時,即使設置了大駝峰等模式,使用對象屬性名,也可以解析成功,即TestStr, testStr均可解析成功。
空屬性是否序列化
全局配置spring.jackson.default-property-inclusion=non_null
non_null
: null不解析
non_empty
: 空字符’'和null均不解析
“對象轉Json字符串時怎么忽略指定屬性”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。