JSON から Lombok @Data POJO を生成する

Lombok の @Data を付与した Java POJO を出力し、getter / setter のボイラープレートを削減します。Lombok がコンパイル時にアクセサ、equals、hashCode、toString を生成します。

Foundations

詳細な説明

Lombok @Data でスリム化する

Lombok は @Data@Getter@Builder などのアノテーションで定型コードを取り除く Java ライブラリです。本ツールで @Data を有効にすると、生成される POJO はフィールドだけになり、残りはコンパイル時に Lombok が合成します。

JSON の例

{
  "id": 7,
  "title": "Inbox Zero",
  "completed": false
}

生成される Lombok 付き Java

package com.example.model;

import lombok.Data;

@Data
public class Todo {
    private Integer id;
    private String title;
    private Boolean completed;
}

@Data が提供するもの

@Data 1 つでコンパイル時に以下が展開されます。

  • 各 non-static フィールドの getter
  • 各 non-static / non-final フィールドの setter
  • 標準的な equals(Object) 実装
  • 標準的な hashCode() 実装
  • 標準的な toString() 実装
  • final フィールドに対する required-args コンストラクタ

より細かく制御したい場合は @Getter@Setter@EqualsAndHashCode@ToString を個別に使えます。

Maven 依存

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>

Gradle

compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'

IDE 設定

IntelliJ IDEA も Eclipse も、合成メソッドを補完で表示するには Lombok プラグインが必要です。プラグインがアノテーションを読み取り、合成メンバを表面化させるため、IDE はあたかもソース上に存在するかのようにジャンプできます。

トレードオフ

Lombok はモデルクラスを読みやすく保ちますが、ビルド時依存を持ち込みます。Maven Central に公開するライブラリや、ダウンストリームの利用者が合成メンバを把握する必要がある場面では、明示的な getter / setter か record の方が安全です。

ユースケース

Spring Boot サービス、社内マイクロサービス、Android バックエンドなど、数十個の DTO を抱えるプロジェクトでは @Data の効果は絶大です。アクセサのノイズが消えることで、レビュアーは実際のフィールドとバリデーションロジックに集中できます。

試してみる — JSON to Java

フルツールを開く