このセクションでは、Jackson を使用して Java クラスをシリアル化するときに null フィールドを無視する方法を理解します。
null フィールドは、クラス レベル、フィールド レベル、またはグローバルで無視できます。それぞれを一つずつ理解していきましょう。
クラスレベルでnullフィールドを無視する
クラスレベルで null フィールドを無視するには、 @JsonInclude 注釈付き include.NON_NULL 。 @JsonInclude アノテーションを使用してクラス レベルで null フィールドを無視する方法を理解する例を見てみましょう。
IgnoreNullFieldExample1.java
//import required classes and package if any import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; //create class IgnoreNullFieldExample1 to understand how we can ignore the null field on marshalling public class IgnoreNullFieldExample1 { //main() methods start public static void main(String args[]) { // create an instance of ObjectMapper class ObjectMapper mapper = new ObjectMapper(); // create Scanner class object Scanner sc= new Scanner(System.in); // using try-catch try { College colg; String name, university, street, state, city, rank; System.out.println('Enter College Name:'); name = sc.nextLine(); System.out.println('Enter University Name:'); university = sc.nextLine(); System.out.println('Enter Street:'); street = sc.nextLine(); System.out.println('Enter City:'); city = sc.nextLine(); System.out.println('Enter State:'); state = sc.nextLine(); System.out.println('Enter College Rank:'); rank = sc.nextLine(); // set values to College object by using constructor colg = new College(name, university, new Address(street, state, null), null); // serialize College using mapper String jsonString = mapper .writerWithDefaultPrettyPrinter() .writeValueAsString(colg); System.out.println(jsonString); } catch (IOException e) { e.printStackTrace(); } //close Scanner class object sc.close(); } } //create class College by using @JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL) class College { //Creating properties of College class public String name; public String university; public Address address; public String rank; // constructor College(String name, String university, Address address, String rank){ this.name = name; this.university = university; this.address = address; this.rank = rank; } } //create class Address @JsonInclude(JsonInclude.Include.NON_NULL) class Address { public String street; public String state; public String city; Address(String street, String state, String city){ this.street = street; this.state = state; this.city = city; } }
出力:
特定の null フィールドを無視する
ここで使用するのは、 @JsonInclude 注釈付き include.NON_NULL フィールド レベルで、特定の null フィールドを無視します。 @JsonInclude アノテーションを使用して特定の null フィールドを無視する方法を理解する例を見てみましょう。
IgnoreNullFieldExample2.java
//import required classes and package if any import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; //create class IgnoreNullFieldExample2 to understand how we can ignore specific null fields on marshalling public class IgnoreNullFieldExample2 { //main() methods start public static void main(String args[]) { // create an instance of ObjectMapper class ObjectMapper mapper = new ObjectMapper(); // create Scanner class object Scanner sc= new Scanner(System.in); // using try-catch try { College colg; String name, university, street, state, city, rank; System.out.println('Enter College Name:'); name = sc.nextLine(); System.out.println('Enter University Name:'); university = sc.nextLine(); System.out.println('Enter Street:'); street = sc.nextLine(); System.out.println('Enter City:'); city = sc.nextLine(); System.out.println('Enter State:'); state = sc.nextLine(); System.out.println('Enter College Rank:'); rank = sc.nextLine(); // set values to College object by using constructor colg = new College(name, university, new Address(street, state, city), null); // serialize College using mapper String jsonString = mapper .writerWithDefaultPrettyPrinter() .writeValueAsString(colg); System.out.println(jsonString); } catch (IOException e) { e.printStackTrace(); } //close Scanner class object sc.close(); } } //create class College by using @JsonInclude(JsonInclude.Include.NON_NULL) class College { //Creating properties of College class public String name; public String university; public Address address; @JsonInclude(JsonInclude.Include.NON_NULL) public String rank; // constructor College(String name, String university, Address address, String rank){ this.name = name; this.university = university; this.address = address; this.rank = rank; } } //create class Address class Address { public String street; public String state; public String city; Address(String street, String state, String city){ this.street = street; this.state = state; this.city = city; } }
出力:
null フィールドをグローバルに無視する
ここでは、ObjectMapper クラスで JsonInclude.Include.NON_NULL を使用して、null フィールドをグローバルに無視する動作を構成します。私たちが使用するのは、 setSerializationInclusion() を使用したメソッド Include.NON_NULL 次の方法で:
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
を使用して null フィールドをグローバルに無視する方法を理解する例を見てみましょう。 setSerializationInclusion() 方法。
IgnoreNullFieldExample3.java
//import required classes and package if any import java.io.IOException; import java.util.Scanner; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; //create class IgnoreNullFieldExample3 to understand how we can ignore null fields globally public class IgnoreNullFieldExample3 { //main() methods start public static void main(String args[]) { // create an instance of ObjectMapper class ObjectMapper mapper = new ObjectMapper(); // create Scanner class object Scanner sc= new Scanner(System.in); // using try-catch try { College colg; String name, university, street, state, city, rank; System.out.println('Enter College Name:'); name = sc.nextLine(); System.out.println('Enter University Name:'); university = sc.nextLine(); System.out.println('Enter Street:'); street = sc.nextLine(); System.out.println('Enter City:'); city = sc.nextLine(); System.out.println('Enter State:'); state = sc.nextLine(); System.out.println('Enter College Rank:'); rank = sc.nextLine(); // set values to College object by using constructor colg = new College(name, university, new Address(street, state, null), null); // serialize College using mapper String jsonString = mapper .setSerializationInclusion(JsonInclude.Include.NON_NULL) .writerWithDefaultPrettyPrinter() .writeValueAsString(colg); System.out.println(jsonString); } catch (IOException e) { e.printStackTrace(); } //close Scanner class object sc.close(); } } //create class College class College { //Creating properties of College class public String name; public String university; public Address address; public String rank; // constructor College(String name, String university, Address address, String rank){ this.name = name; this.university = university; this.address = address; this.rank = rank; } } //create class Address class Address { public String street; public String state; public String city; Address(String street, String state, String city){ this.street = street; this.state = state; this.city = city; } }
出力:
上記のすべてのメソッドは null フィールドを無視するために使用され、各メソッドは異なるケースで使用されます。