Jacksonとは#
JacksonはJavaで使えるJSONライブラリ JSON形式の文字列をJavaのオブジェクトに直接マッピングしたり、逆にJavaオブジェクトをJSON文字列に変換できる
@JsonInclude(JsonInclude.Include.NON_NULL)
- JsonInclude.Include.NON_NULLオプションを渡すことでJSONからJavaオブジェクトにマッピングする際に中身がNullのオブジェクトは作成されなくなる
- ただしコレクションの場合は空で作成される
- JsonInclude.Include.NON_EMPTY オプションを渡すと空のコレクションが作成しないようにすることも可能
- 何も指定しない場合は(Include.ALWAYS: 常に含める)となる
@JsonProperty("JSONのキー名")
- マッピングしたいJSON のキーを指定するためのアノテーション
@JsonGetter("JSONのキー名")
- JsonPropertyに代わるもので、指定されたメソッドが “getter-method “であることを示す
- このアノテーションをつけるとそのメソッドはJavaオブジェクトをJSONに変換するメソッドであることを示せる
@JsonProperty
と@JsonGetter
の違い@JsonProperty
はフィールドやメソッドの名前とそのシリアライズ/デシリアライズ時のJSONプロパティの名前を関連付けるために使用される@JsonGetter
はメソッドがJSONプロパティの値を取得するためのアクセサであることを示し、メソッドの名前がJSONプロパティの名前として使用される- 一般的に、フィールドに直接アクセスする場合は
@JsonProperty
アノテーションを使用し、メソッド経由でアクセスする場合は@JsonGetter
アノテーションを使用することが一般的。 ただし、Jacksonは両方のアノテーションをサポートしており、使用方法はプロジェクトや個人の好みにより異なる場合がある
@JsonSetter("JSONのキー名")
- JsonPropertyに代わるもので、指定されたメソッドが “Setter-method “であることを示す
- このアノテーションをつけるとそのメソッドはJSONからJavaオブジェクトに変換するメソッドであることを示せる
@JsonSubTypes.Type(value = PurchaseTransactionPOSTParams.class, name = "purchase")
- 継承関係を持つクラスに対してJSONデシリアライゼーション(JSONからオブジェクトへの変換)をする際に正しいサブクラスが選択されるように指定できる
@JsonSubTypes
アノテーションを子クラスに付け、@JsonTypeInfo
アノテーションを親クラスに付ける必要がある
@JsonView(インターフェース名.class)
- プロパティがシリアライズおよびデシリアライズに含まれるビューを定義するために使用する
- レスポンスの形式を定義したインターフェースと紐づけるために使用するアノテーション
@JsonViewアノテーション使用例#
public class User { private String username; private String email; @JsonView(Views.Public.class) public String getUsername() { return username; } @JsonView(Views.Internal.class) public String getEmail() { return email; } } public interface Views { public static class Public {} // usernameフィールドのみが含まれるJSONが生成される public static class Internal extends Public {} // usernameとemailの両方のフィールドが含まれるJSONが生成される }
Jacksonの導入#
pomファイルに以下を追記
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.2</version>
</dependency>
参考#
- https://kazuhira-r.hatenablog.com/entry/2023/01/15/210749
- https://qiita.com/niwasawa/items/80c3c3b1148be67b09d1
- https://b1san-blog.com/post/spring/spring-jackson/
- https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations
- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core