つまらない理由でエンティティ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); } } }