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 の効果は絶大です。アクセサのノイズが消えることで、レビュアーは実際のフィールドとバリデーションロジックに集中できます。