ホームページ > Java > &#&チュートリアル > 逆シリアル化に影響を与えずに、JSON シリアル化からフィールドを選択的に除外するにはどうすればよいですか?

逆シリアル化に影響を与えずに、JSON シリアル化からフィールドを選択的に除外するにはどうすればよいですか?

DDD
リリース: 2024-11-24 13:28:12
オリジナル
582 人が閲覧しました

How Can I Selectively Exclude Fields from JSON Serialization Without Affecting Deserialization?

@JsonIgnore の選択的適用: シリアル化のみの除外への対処

サーバーとのデータ交換中に、ユーザー オブジェクトには機密情報が含まれる可能性があります。シリアル化中はクライアントから隠蔽する必要があります。よく使用されるアプローチは、@JsonIgnore アノテーションを適用して機密プロパティを隠すことです。ただし、これにより逆シリアル化が妨げられ、特定のシナリオで課題が生じる可能性もあります。

問題を理解する

プロパティの @JsonIgnore アノテーションにより、JSON シリアル化にそのプロパティが含まれることが防止されます。ただし、逆シリアル化中に同じプロパティが必要な場合 (ユーザー アカウントの作成など)、除外が問題になります。

@JsonIgnore による選択的除外

解決するにはこの問題では、Jackson のバージョンに応じて 2 つの異なるアプローチを取ることができます。 used:

1.9 より前の Jackson バージョン:

  • Getter で @JsonIgnore を使用する: getter メソッドにのみアノテーションを付けると、プロパティが許可されます逆シリアル化中に含まれ、逆シリアル化中に除外される

Jackson バージョン 1.9 以降:

  • @JsonProperty with READ_ONLY: 注釈引数 @JsonProperty を追加することにより(アクセス = JsonProperty.Access.READ_ONLY) setter に対して、プロパティが書き込み可能であり、シリアル化中に除外されるように指定できます。

例:

パスワードを持つユーザー オブジェクトを考えます。フィールド:

@JsonIgnore
private String password;

// Setter with READ_ONLY access (Jackson 1.9 and later)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
public void setPassword(String password) {
    this.password = password;
}
ログイン後にコピー

注:

  • READ_ONLY を使用すると、パスワードは逆シリアル化のみに使用されます。
  • どちらのアプローチも有効です。検証され、意図したとおりに機能します。

以上が逆シリアル化に影響を与えずに、JSON シリアル化からフィールドを選択的に除外するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート