[轉]Jackson 解析json數據之忽略解析字段注解@JsonIgnoreProperties


以前解析json用的慣的就是Google的gson了,用慣了基本就用它了,一直也沒發現什么大問題,因為都是解析簡單的json數據。但是最近學習springboot,要解析一個比較復雜的json數據。就照之前的用gsonformat自動生成實體類,讓gson直接解析,本想着一切ok了,可是確報錯了,剛開始以為gsonformat生成的類有錯誤,因為畢竟json數據較為復雜,於是多生成幾次,可是還是不行。面對這樣復雜的數據,我可不想手動寫實體類,於是想着又換了自動生成實體類的工具,可是結果還是未能如願。於是想着能從錯誤的日志中發現點什么,可是無奈gson沒有打印具體的出錯的地方,后來搗鼓了好久,想着不如換個解析工具吧。於是上網找了找,覺得Jackson不錯,趕緊試用,發現還真不錯,雖然也沒能解析成功,但是它打印出了詳細的出錯信息,照着出錯的信息改了馬上就解析成功了。

說說出錯的原因:平時解析json呢基本接口提供的json都是很明確的,所以用gson解析一般不會有啥大問題。但是此次情況不同,接口的數據我無法完全的預知,所以實體類字段有可能不完整。所以當返回的json數據里包含了實體類沒有的字段時gson就有可能出錯,但是對於這種情況用gson解析我是沒找到相應的解決辦法,如果誰知道麻煩告知一下,謝謝。

當然用Jackson解決就非常容易了,只需要在實體類上加上注解就可以。

@JsonIgnoreProperties(ignoreUnknown = true)
class ExtraBean {
    private boolean is_museuser;

    public boolean isIs_museuser() {
        return is_museuser;
    }

    public void setIs_museuser(boolean is_museuser) {
        this.is_museuser = is_museuser;
    }
}

@JsonIgnore注解用來忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法時,和Filed效果一樣。這個注解只能用在POJO存在的字段要忽略的情況,不能滿足現在需要的情況。

@JsonIgnoreProperties(ignoreUnknown = true),將這個注解寫在類上之后,就會忽略類中不存在的字段,可以滿足當前的需要。這個注解還可以指定要忽略的字段。使用方法如下:

@JsonIgnoreProperties({ "internalId", "secretKey" })
指定的字段不會被序列化和反序列化。

到此順利解決。(還有Gson有類似的實現請告知一下,本人只知道gson轉string忽略字段的方法,謝謝)

(原文地址:http://www.jianshu.com/p/f6884331d366)

 

同時參考了:

有時候,如果數據庫表中增加一個字段,但返回的JSON字符串中含有我們並不需要的字段,那么當對應的實體類中不含有該字段時,會拋出一個異常,告訴你有些字段沒有在實體類中找到。解決辦法很簡單,在聲明ObjectMapper之后,加上上述代碼:

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

(原文地址:http://www.cnblogs.com/davidwang456/p/5434071.html)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM