Jackson解析jsonデータの無視解析フィールド注記@JsonIgnoreProperties
以前はjsonを解析するのに慣れていたのがGoogleのgsonで、慣れてから基本的に使っていたので、ずっと大きな問題は見つかりませんでした.簡単なjsonデータを解析しているからです.しかし、最近springbootを勉強して、比較的複雑なjsonデータを解析します.以前のようにgsonformatで自動的に実体クラスを生成し、gsonに直接解析させ、すべてokだと思っていたが、確かに間違っていた.最初はgsonformatで生成されたクラスに間違いがあると思っていたが、結局jsonデータは複雑なので、何度も生成したが、やはりだめだった.このような複雑なデータに直面して、私は手動でエンティティクラスを書きたくなくて、そこでまた自動的にエンティティクラスを生成するツールを変えたいと思って、しかし結果はやはり望み通りにならなかった.そこで、间违ったログから何かを见つけることができると思っていましたが、仕方なくgsonは具体的な间违いを印刷していませんでした.そこでインターネットを利用して探して、Jacksonが悪くないと思って、急いで試用して、発見するのは本当に悪くなくて、解析にも成功していませんが、しかしそれは詳しい間違いの情報を印刷して、間違いの情報によってすぐに解析に成功しました.エラーの原因を言います:ふだんjsonを解析します基本的なインタフェースの提供するjsonはすべてとても明確で、だからgsonで解析して普通は大した問題はありません.しかし、今回の状況では、インタフェースのデータが完全に予知できないため、エンティティクラスフィールドが不完全になる可能性があります.したがって、返されたjsonデータにエンティティクラスにないフィールドが含まれている場合、gsonはエラーになる可能性がありますが、この場合、gson解析では対応する解決策が見つかりません.もちろんジャックソンで解決するのは簡単で、実体クラスに注釈を付けるだけでいいです.
@JsonIgnore注記は、一部のフィールドを無視するために使用されます.FieldメソッドまたはGetterメソッドで使用できます.Setterメソッドで使用する場合、Filed効果と同じです.この注記は、POJOが存在するフィールドで無視する場合にのみ使用でき、現在のニーズを満たすことはできません.@JsonIgnoreProperties(ignoreUnknown=true)は、この注釈をクラスに書くと、クラスに存在しないフィールドが無視され、現在のニーズを満たすことができます.この注記では、無視するフィールドも指定できます.使用方法は以下のとおりです:@JsonIgnoreProperties({"internalId","secretKey"})で指定したフィールドはシーケンス化されず、逆シーケンス化されません.これですんなりと解決する.(またGsonに似たような実装があるので教えてください.本人はgsonがstringを回してフィールドを無視する方法しか知りません.ありがとうございます)
@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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
@JsonIgnore注記は、一部のフィールドを無視するために使用されます.FieldメソッドまたはGetterメソッドで使用できます.Setterメソッドで使用する場合、Filed効果と同じです.この注記は、POJOが存在するフィールドで無視する場合にのみ使用でき、現在のニーズを満たすことはできません.@JsonIgnoreProperties(ignoreUnknown=true)は、この注釈をクラスに書くと、クラスに存在しないフィールドが無視され、現在のニーズを満たすことができます.この注記では、無視するフィールドも指定できます.使用方法は以下のとおりです:@JsonIgnoreProperties({"internalId","secretKey"})で指定したフィールドはシーケンス化されず、逆シーケンス化されません.これですんなりと解決する.(またGsonに似たような実装があるので教えてください.本人はgsonがstringを回してフィールドを無視する方法しか知りません.ありがとうございます)