メインコンテンツへスキップ
  1. 記事一覧/

Jacksonについての個人的メモ

·116 文字·1 分
Java Jackson Programing
Bigbell
著者
Bigbell
某メガベンチャーで働いているエンジニアの卵です。
目次

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>

参考
#

Related

Bean Validationについての個人的メモ
·38 文字·1 分
Java BeanValidation Programing
Bean Validation (javax.validation.Constraintz) に関する知見をまとめています。
Lombokライブラリについての個人的メモ
·84 文字·1 分
Java Lombok Programing
この記事ではネットで調べたLombokライブラリに関する知見をまとめています。
Jerseyフレームワークの個人的メモ
·70 文字·1 分
Java Jersey WebFramework Programing
この記事ではネットで調べたJerseyフレームワークに関する知見をまとめています。