Jackson 解析json數(shù)據(jù)之忽略解析字段注解@JsonIgnoreProperties

以前解析json用的慣的就是Google的gson了,用慣了基本就用它了,一直也沒發(fā)現(xiàn)什么大問題,因?yàn)槎际墙馕龊?jiǎn)單的json數(shù)據(jù)。但是最近學(xué)習(xí)springboot,要解析一個(gè)比較復(fù)雜的json數(shù)據(jù)。就照之前的用gsonformat自動(dòng)生成實(shí)體類,讓gson直接解析,本想著一切ok了,可是確報(bào)錯(cuò)了,剛開始以為gsonformat生成的類有錯(cuò)誤,因?yàn)楫吘筳son數(shù)據(jù)較為復(fù)雜,于是多生成幾次,可是還是不行。面對(duì)這樣復(fù)雜的數(shù)據(jù),我可不想手動(dòng)寫實(shí)體類,于是想著又換了自動(dòng)生成實(shí)體類的工具,可是結(jié)果還是未能如愿。于是想著能從錯(cuò)誤的日志中發(fā)現(xiàn)點(diǎn)什么,可是無奈gson沒有打印具體的出錯(cuò)的地方,后來?yè)v鼓了好久,想著不如換個(gè)解析工具吧。于是上網(wǎng)找了找,覺得Jackson不錯(cuò),趕緊試用,發(fā)現(xiàn)還真不錯(cuò),雖然也沒能解析成功,但是它打印出了詳細(xì)的出錯(cuò)信息,照著出錯(cuò)的信息改了馬上就解析成功了。

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

當(dāng)然用Jackson解決就非常容易了,只需要在實(shí)體類上加上注解就可以。

@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方法時(shí),和Filed效果一樣。這個(gè)注解只能用在POJO存在的字段要忽略的情況,不能滿足現(xiàn)在需要的情況。

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

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

到此順利解決。(還有Gson有類似的實(shí)現(xiàn)請(qǐng)告知一下,本人只知道gson轉(zhuǎn)string忽略字段的方法,謝謝)

參考:
http://blog.csdn.net/isea533/article/details/33397735
http://www.cnblogs.com/dupang/p/5673097.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容