JavaのEntityクラスの値を全てログに出力する方法

java

JavaのエンティティクラスやDTOクラスのフィールド値をログに出力しないといけないととかってありますよね。そんな時どうやって値をログに出力していますか?
1つ1つのフィールドのgetterメソッドを呼んでログに出力する・・・なんてことをやっていたら大変です。

今回はエンティティクラスにあるフィールド値を一括でログに出力する方法を紹介していきます。

[スポンサーリンク]

エンティティクラスのフィールド値を一括で取得する

まずこちらはエンティティクラスになります。
ObjectクラスのtoStringをオーバーライドして、全てのフィールド値を返却するメソッドを作成します。

public class EntityA {
    public EntityA(int id, String name, int age) {
        this.id   = id;
        this.name    = name;
        this.age = age;
    }
    
    private int id;
    private String name;
    private int age;
    
    @Override
    public String toString() {
        return ReflectionToStringBuilder.toString(this);
    }
}

こちらがエンティティクラスを呼び出すクラスです。
3行目でエンティティクラスの値全てが出力されます。

public static void main( String[] args ) {
    EntityA entity = new EntityA(1, "test", 25);
    System.out.println(entity.toString());
}

実行結果

>実行結果
jp.co.example.EntityA@7c53a9eb[id=1,name=test,age=25]

ReflectionToStringBuilderを使うには

ReflectionToStringBuilderを使うにはcommons-lang3をpom.xmlのdependencyへ指定します。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>

さいごに

エンティティクラスの値を全て出力させるためすごい数のgetterメソッドを呼び出しているソースをたまにみかけますが、これって地味に保守する人が大変になりますよね。フィールドを追加したはいいけどログに仕込むの忘れたりとか。

ReflectionToStringBuilderを使えばフィールドが増えても減ってもログの部分は何も変更を加えなくていいので楽ができるはずです。

それでは!