Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java(Gson)の@Exposeアノテーションを使ってJSONから特定のフィールドを除外する方法

Gsonライブラリが提供する@Exposeアノテーションを使用すると、シリアライズ(直列化)やデシリアライズ(逆直列化)の対象にフィールドを含めるか除外するかを細かく制御できます。このアノテーションはserializedeserializeという2つのboolean型パラメータを受け取ることができ、それぞれにtrueまたはfalseを指定します。

@ExposeアノテーションをGsonに反映させるには、通常のnew Gson()ではなく、GsonBuilderクラスを使ってGsonインスタンスを作成し、excludeFieldsWithoutExposeAnnotation()メソッドを呼び出す必要があります。このメソッドを呼び出すことで、@Exposeアノテーションが付与されていないすべてのフィールドが、シリアライズ・デシリアライズの対象から自動的に除外されるようになります。

構文

public GsonBuilder excludeFieldsWithoutExposeAnnotation()

コード例

以下の例では、Employeeクラスのnameageフィールドには@Expose(serialize = true, deserialize = true)を付与し、salaryフィールドには@Expose(serialize = false, deserialize = false)を付与しています。その結果、excludeFieldsWithoutExposeAnnotation()を有効にしたGsonでは、salaryフィールドだけがJSON出力から除外されます。

import com.google.gson.*;
import com.google.gson.annotations.*;

public class JsonExcludeAnnotationTest {
   public static void main(String args[]) {
      Employee emp = new Employee("Raja", 28, 40000.00);

      // 通常のGsonインスタンス(@Exposeを無視)
      Gson gson = new GsonBuilder().setPrettyPrinting().create();
      String jsonStr = gson.toJson(emp);
      System.out.println(jsonStr);

      // @Exposeアノテーションを有効化したGsonインスタンス
      gson = new GsonBuilder().setPrettyPrinting()
             .excludeFieldsWithoutExposeAnnotation().create();
      jsonStr = gson.toJson(emp);
      System.out.println(jsonStr);
   }
}

// Employeeクラス
class Employee {
   @Expose(serialize = true, deserialize = true)
   public String name;

   @Expose(serialize = true, deserialize = true)
   public int age;

   @Expose(serialize = false, deserialize = false)
   public double salary;

   public Employee(String name, int age, double salary) {
      this.name = name;
      this.age = age;
      this.salary = salary;
   }
}

実行結果

1つ目の出力は通常のGsonによるもので、@Exposeアノテーションの設定に関わらずすべてのフィールドが出力されます。2つ目の出力はexcludeFieldsWithoutExposeAnnotation()を有効にした場合で、serialize = falseが指定されたsalaryフィールドが除外されていることが確認できます。

{
  "name": "Raja",
  "age": 28,
  "salary": 40000.0
}
{
  "name": "Raja",
  "age": 28
}

このように、@ExposeアノテーションとGsonBuilderの組み合わせを活用すれば、パスワードや給与などの機密性の高いデータをJSONに含めずに安全にオブジェクトを変換できます。

  1. 【Java入門】Gsonライブラリを使ってJSON文字列をファイルに書き込む方法

    GsonライブラリとはGsonは、JavaオブジェクトをJSON形式に変換(シリアライズ)するためのGoogle製オープンソースライブラリです。逆に、JSON文字列からJavaオブジェクトへの変換(デシリアライズ)も簡単に行えるため、JavaでJSONを扱う際の定番ライブラリとして広く利用されています。Gsonを使用する際の中心的なクラスはGsonクラスです。インスタンスはnew Gson()のように直接生成できますが、設定をカスタマイズしたい場合はGsonBuilderクラスを使ってGsonインスタンスを作成することも可能です。この記事では、Gsonクラスが提供するtoJson()メソッドを

  2. JavaのGsonライブラリでJSONを整形出力(Pretty Print)する方法

    Gsonは、Googleが開発したJava向けのJSONライブラリです。Gsonを利用することで、JavaオブジェクトからJSONを生成したり、JSON文字列をJavaオブジェクトへ変換(デシリアライズ)したりできます。 デフォルトでは、Gsonは余計な空白や改行を省いたコンパクト形式でJSONを出力します。ログの確認やデバッグ時にJSONを読みやすくしたい場合は、整形出力(Pretty Print)を有効にしましょう。そのためには、GsonBuilderクラスのsetPrettyPrinting()メソッドを使ってGsonインスタンスを構成します。このメソッドを呼び出すことで、インデントと改