toString の代用

つまらない理由でエンティティClass定義やDTOクラス定義で、
lombok の @ToString や @Data を後から付与させてもらえないプロジェクトで
ログ出力でそのオブジェクトを出力したくて困る場合がある。
せめて、フィールドが public 宣言か、getterメソッドがある状況、lombok の @Getter はついている、
というのが前提で、ログ出力でオブジェクト値を確認する。
JSON で出力させる。

フィールドが public 宣言か、getterメソッドが存在しないと、Jackson のシリアライズでは
com.fasterxml.jackson.databind.exc.InvalidDefinitionException

No serializer found for class ~
と例外が発生するので注意が必要

以下のような static メソッドを用意するくらいしか方法がないのか。。。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.util.DefaultIndenter;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;

public interface EasyJackson{

    public static <T> String toJson(T t) {
        DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter("   ", DefaultIndenter.SYS_LF);
        DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
        printer.indentObjectsWith(indenter);
        printer.indentArraysWith(indenter);
        try{
            return new ObjectMapper().writer(printer).writeValueAsString(t);
        }catch(JsonProcessingException e){
            throw new RuntimeException(e.getMessage(), e);
        }
    }
}