JavaでJSONオブジェクトの複数のプロパティを無視する方法:@JsonIgnorePropertiesアノテーションの使い方
JavaでJacksonライブラリを使用してJSONのシリアライズ・デシリアライズを行う際、特定のプロパティやフィールドを処理対象から除外したいケースはよくあります。そんなときに役立つのが@JsonIgnorePropertiesアノテーションです。
@JsonIgnorePropertiesアノテーションを使うと、クラスに対して無視したいプロパティ(フィールド)のリストを指定できます。個々のフィールドごとにアノテーションを付ける代わりに、クラス宣言の直上に配置することで、複数のプロパティをまとめて無視できるのが特徴です。
@JsonIgnorePropertiesの構文
@Target(value={ANNOTATION_TYPE,TYPE,METHOD,CONSTRUCTOR,FIELD})
@Retention(value=RUNTIME)
public @interface JsonIgnoreProperties使用例:複数のプロパティを無視する
以下の例では、Customerクラスの「id」と「address」という2つのプロパティを@JsonIgnorePropertiesで指定し、シリアライズ・デシリアライズの両方で除外しています。
import java.io.*;
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.*;
public class JsonIgnorePropertiesTest {
public static void main(String[] args) throws IOException {
Customer customer = new Customer("120", "Ravi", "Hyderabad");
System.out.println(customer);
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(customer);
System.out.println("JSON: " + jsonString);
System.out.println("---------");
jsonString = "{\"id\":\"130\",\"name\":\"Rahul\", \"address\":\"Mumbai\"}";
System.out.println("JSON: " + jsonString);
customer = mapper.readValue(jsonString, Customer.class);
System.out.println(customer);
}
}
// Customerクラス
@JsonIgnoreProperties({"id", "address"})
class Customer {
private String id;
private String name;
private String address;
public Customer() {
}
public Customer(String id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", address=" + address + "]";
}
}実行結果
Customer [id=120, name=Ravi, address=Hyderabad]
JSON: {"name":"Ravi"}
---------
JSON: {"id":"130","name":"Rahul", "address":"Mumbai"}
Customer [id=null, name=Rahul, address=null]動作のポイント
この実行結果から、@JsonIgnorePropertiesの挙動がよく分かります。
- シリアライズ時(Java → JSON): 無視対象に指定した「id」と「address」は出力されず、JSONには「name」のみが含まれます。
- デシリアライズ時(JSON → Java): 入力JSONに「id」や「address」が含まれていても、これらは読み飛ばされるため、対応するフィールドはnullのままになります。
補足:ignoreUnknownオプションについて
@JsonIgnorePropertiesには、存在しないプロパティへの対処に便利なignoreUnknown属性もあります。次のように指定すると、JSON側にJavaクラスに定義されていない未知のプロパティが含まれていても、UnrecognizedPropertyExceptionが発生せずエラーなく処理を続行できます。
@JsonIgnoreProperties(ignoreUnknown = true)
class Customer {
// ...
}外部APIからのレスポンスなど、フィールドが変動しうるJSONを扱う場合には、ignoreUnknown = trueを設定しておくと安全です。このように@JsonIgnorePropertiesを活用すれば、シリアライズ・デシリアライズ時に不要なプロパティを柔軟に制御できます。
-
Javaでプロパティファイルからデータを読み取る方法を解説
JavaのPropertiesクラスは、Hashtableクラスのサブクラスであり、永続化可能なプロパティの集合(プロパティセット)を表します。Propertiesオブジェクトはストリームへ保存したり、ストリームから読み込んだりすることができます。また、プロパティリスト内の各キーとそれに対応する値は、どちらも文字列型として扱われます。Javaでは、Propertiesファイルを使うことでアプリケーションの設定情報を外部化し、キーと値(key-value)のペアとして管理できます。Propertiesクラスが提供するload()メソッドを使用すると、.propertiesファイルに記述されたキー
-
JavaオブジェクトをJSONに変換する方法(Jackson・Gsonの使い方)
このチュートリアルでは、JavaオブジェクトをJSON形式に変換する方法を、定番ライブラリであるJacksonとGsonの2つを使って解説します。 サンプルとして使用するのは、ごく標準的なPOJO(Plain Old Java Object)であるPersonクラスです。Personオブジェクトを作成したら、それぞれのライブラリを使ってJSONへ変換してみましょう。 Person.java import java.util.List; import java.util.Map; public class Person { String name; Integer age;