Jackson 2 json変換Bean,Beanには対応する値jackson Unの解決策がない
1690 ワード
この問題にぶつかった時私は見つけた.
SpringMVC@RequestBody問題:Unrecognized field,not marked as ignorable
この記事では、
@JsonIgnoreProperties(ignoreUnknown=true)この注釈をクラスに書くと、クラスに存在しないフィールドは無視され、現在のニーズを満たすことができます.この注記では、無視するフィールドも指定できます.使用方法は次のとおりです.
@JsonIgnoreProperties({ "internalId", "secretKey"})
指定したフィールドはシーケンス化されず、逆シーケンス化されません.
しかし、私のbeanはこのようなものです.
私のJSONはこうです.
私が変換するのはPクラスですが、注記はCクラスに書くだけで有効です.実際の応用では,Cクラスは他の人が提供する共通クラスであり,修正は不可能である.だから注釈方式は失敗しました.
そこで私はこの文章を見つけました.
jackson json変換Bean,Beanには対応する値がありませんjackson Unrecognized field
しかし、この中でJackson 1と言っていますが、私は最新版2を使っているので、彼の書き方では適用されません.
資料を探しても役に立たなかったので、自分でやってみました.Xバージョンは次のように変更されました.
これで問題を解決します!
SpringMVC@RequestBody問題:Unrecognized field,not marked as ignorable
この記事では、
@JsonIgnoreProperties(ignoreUnknown=true)この注釈をクラスに書くと、クラスに存在しないフィールドは無視され、現在のニーズを満たすことができます.この注記では、無視するフィールドも指定できます.使用方法は次のとおりです.
@JsonIgnoreProperties({ "internalId", "secretKey"})
指定したフィールドはシーケンス化されず、逆シーケンス化されません.
しかし、私のbeanはこのようなものです.
public class P {
private C c;
public C getC() {
return c;
}
public void setC(C c) {
this.c = c;
}
@Override
public String toString() {
return "P [c=" + c + "]";
}
}
public class C {
private String a;
private String b;
private String c;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
@Override
public String toString() {
return "C [a=" + a + ", b=" + b + ", c=" + c + "]";
}
}
私のJSONはこうです.
{"c":{"a":"1","b":"2","c":"3","d":"4"}}
私が変換するのはPクラスですが、注記はCクラスに書くだけで有効です.実際の応用では,Cクラスは他の人が提供する共通クラスであり,修正は不可能である.だから注釈方式は失敗しました.
そこで私はこの文章を見つけました.
jackson json変換Bean,Beanには対応する値がありませんjackson Unrecognized field
しかし、この中でJackson 1と言っていますが、私は最新版2を使っているので、彼の書き方では適用されません.
資料を探しても役に立たなかったので、自分でやってみました.Xバージョンは次のように変更されました.
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
これで問題を解決します!