1. ホーム
  2. java

[解決済み】@JsonIgnoreProperties を既知と未知の両方のプロパティで使用できるようになりました。

2022-02-09 19:37:49

質問

JPAエンティティの既知のプロパティを無視するための私の現在のアノテーションは、次のとおりです。

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler","created","updated","createdBy","lastUpdatedBy"})

これらのクラス・プロパティを無視するだけでなく、サーバーが受け取る未知のプロパティも無視したいと思います。私は、以下のアノテーションによって、未知のプロパティを無視する唯一の方法を知っています。

@JsonIgnoreProperties(ignoreUnknown=true)

しかし、上記の私の現在のアノテーションにこれを追加する方法がよくわかりません。以下のように複数の方法を試してみましたが、どれもうまくいかず、このシナリオの例もオンラインで見つけることができませんでした。

また、例やドキュメントのリードがあれば助かります。

どのように解決するのですか?

設定 ignoreUnknown から true で、無視するプロパティの名前を定義します。 value 要素を使用します。

@JsonIgnoreProperties(ignoreUnknown = true, 
                      value = {"hibernateLazyInitializer", "handler", "created"})

どのように機能するのですか?

からの引用をご覧ください。 ドキュメント (ハイライトは私です)。

最もシンプルな形で、アノテーションは次のようになります。

@Entity

アットマーク文字( @ は、この後がアノテーションであることをコンパイラに示す。次の例では、アノテーションの名前が Override :

@Override
void mySuperMethod() { ... }

アノテーションには 要素 は、名前付きでも無名でもよく、それらの要素に対応する値があります。

@Author(name = "Benjamin Franklin", date = "3/27/2003")
class MyClass() { ... }

または

@SuppressWarnings(value = "unchecked")
void myMethod() { ... }

という名前の要素が1つだけある場合 value であれば、名前を省略することができます。 というように、「?

@SuppressWarnings("unchecked")
void myMethod() { ... }

未知のプロパティを処理する他の方法

不明なプロパティを無視するには、次のようにすることもできます。

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);