JacksonのObjectMapperを使って、あるオブジェクトをデシリアライズしようとしたところ「ofコンストラクタが見つからない」というエラーが発生してでシリアライズが失敗した
原因はわからないままだが、やったことをメモ
失敗したクラスは以下
@Value public class Coordinate { private Coordinate(String lat, String lon) { this.lat = lat; this.lon = lon; } @JsonCreator public static Coordinate of(String lat, String lon) { return new Coordinate(lat, lon); } /** Latitude. */ String lat; /** Longitude. */ String lon; }
Lombokの@Value
をつけてイミュータブルにし、デフォルトコンストラクタはprivate
にして外部から生成されないようにする
そして、@JsonCreator
をつけて、インスタンス生成はofコンストラクタ
を使うように設定していた
ただ、このofコンストラクタ
が見つからないというエラー
@Value(staticConstructor="of")
をつけてみたが、それでもダメだった
結局デフォルトコンストラクタのprivate
を消したら(デフォルトコンストラクタを消したら)動いた
@Value public class Coordinate { - private Coordinate(String lat, String lon) { - this.lat = lat; - this.lon = lon; - } - - @JsonCreator public static Coordinate of(String lat, String lon) { return new Coordinate(lat, lon); } /** Latitude. */ String lat; /** Longitude. */ String lon; }
デフォルトコンストラクタをprivate
にする設計上の意図があったが、うまく動かないので一旦これでいく