Cannot construct instance of ... (no Creators, like default constructor, exist) は、JSON から Java のオブジェクトを作るときに、Jackson がそのクラスの作り方(コンストラクタ)を見つけられなかったときの例外です。

エラー文の後半(: のあと)で、原因が分かります。

エラー文の後半 原因 直し方
cannot deserialize from Object value (no delegate- or property-based Creator) 引数なしのコンストラクタが無い(引数ありだけ) @JsonCreator+@JsonProperty、引数なしのコンストラクタを足す、record にする
non-static inner classes like this can only by instantiated using default, no-argument constructor static でない内部クラス static を付ける
abstract types either need to be mapped to concrete types, ... インターフェース・抽象クラスに変換しようとした 具体的なクラスを指定する、型の情報を JSON に入れる
(although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('a') リストの項目に文字列が来たなど、JSON の形が違う JSON の形を確かめる

確認環境:Jackson 2.14(jackson-databind 2.14.0、jackson-module-parameter-names 2.14.2)、OpenJDK 21 で再現しました(確認日 2026年10月11日)。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Jackson Cannot construct instanceの直し方」

原因① 引数なしのコンストラクタが無い(一番多い)

public static class NoDefault {
    public final int id;
    public final String name;
    public NoDefault(int id, String name) { this.id = id; this.name = name; }
}
om.readValue("{\"id\":1,\"name\":\"a\"}", NoDefault.class);
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `N$NoDefault` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

jackson-annotations の README では、Jackson は既定で引数なしのコンストラクタを使ってオブジェクトを作り、別のコンストラクタを使うには @JsonCreator が必要と説明されています。 引数ありのコンストラクタしか無いと、どの引数に JSON のどの項目を入れればよいか分からず、この例外になりました。

直し方 書き方 結果
@JsonCreator と @JsonProperty コンストラクタと引数に付ける WithCreator{1,a}
引数なしのコンストラクタを足す public WithDefault() {} WithDefault{1,a}
record にする(Java 16 以降) public record UserRec(int id, String name) {} UserRec[id=1, name=a](何も付けずに動いた)
ParameterNamesModule + javac -parameters 下で説明 NoDefault{1,a}
public static class WithCreator {
    public final int id;
    public final String name;
    @JsonCreator
    public WithCreator(@JsonProperty("id") int id, @JsonProperty("name") String name) {
        this.id = id; this.name = name;
    }
}

final のフィールドを使い、不変のクラスにしたいときは、@JsonCreator か record が向いています。

ParameterNamesModule は -parameters が必要

コンパイル ParameterNamesModule を登録 結果
javac(指定なし) した 同じ例外(no Creators)
javac -parameters した NoDefault{1,a}
javac -parameters していない 同じ例外

ParameterNamesModule は、コンパイルのときに -parameters を付けて、引数の名前を class ファイルに残したときだけ効きました。 「ある環境では動き、別の環境では動かない」ときは、ビルドの設定で -parameters が付いているかを確かめます。

原因② static でない内部クラス

public class N {
    public class Inner { public int id; public Inner() {} }    // static が無い
}
Cannot construct instance of `N$Inner`: non-static inner classes like this can only by instantiated using default, no-argument constructor

static でない内部クラスは、外側のクラスのオブジェクトが無いと作れないため、引数なしのコンストラクタを書いていても失敗しました。 JSON 用のクラスを別のクラスの中に書くときは、public static class にします。テストのコードで起きやすい形です。内部クラスの違いは、既存の記事「Java内部クラス・staticネスト・匿名クラスの違い比較表」で扱っています。

原因③ インターフェース・抽象クラス

Cannot construct instance of `N$Shape` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information

readValue(json, Shape.class) の Shape がインターフェースや抽象クラスだと、どの具体的なクラスを作ればよいか分かりません。 変換先には具体的なクラスを指定します。JSON によって作るクラスを変えたいときは、@JsonTypeInfo・@JsonSubTypes で JSON に型の情報を持たせる方法が、jackson-annotations の README で紹介されています。

原因④ JSON の形が違う(although at least one Creator exists)

JSON 変換先 エラー文
{"tags":"a"} List<String> tags ArrayList について (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('a')
{"code":"X1"} 文字列1つのコンストラクタだけのクラス ... (although at least one Creator exists): cannot deserialize from Object value ...

although at least one Creator exists は「作り方はあるが、この形の JSON からは作れない」という意味です。リストのつもりが文字列1つ、オブジェクトのつもりが文字列、といった JSON の形の違いを確かめます。文字列1つのコンストラクタだけのクラスは、"X1" のような文字列の JSON からは作れました。

確認の手順(チェックリスト)

順番 確認すること 方法
1 エラー文の後半 no delegate・non-static・abstract・although
2 引数なしのコンストラクタがあるか 無ければ @JsonCreator か record
3 内部クラスに static があるか public static class
4 変換先がインターフェース・抽象クラスでないか 具体的なクラスに
5 JSON の形 配列か、オブジェクトか、文字列か
6 ParameterNamesModule を使うなら -parameters でコンパイルしているか

よくある質問

Q. Lombok の @Value や @AllArgsConstructor のクラスでも起きますか。 A. 引数ありのコンストラクタだけになる場合は、同じ原因で起きる可能性があります。Lombok が作るコードは、既存の記事「Lombokアノテーション一覧|展開後コードと使い分け早見表」で確かめられます。

Q. JSON に知らない項目があるときのエラーは。 A. 関連記事の「Jackson UnrecognizedPropertyExceptionの直し方」で扱っています。

まとめ

  • JSON からオブジェクトを作る方法(コンストラクタ)が見つからない例外
  • エラー文の後半で原因が分かる(no delegate・non-static・abstract・although)
  • 引数ありだけのクラスは @JsonCreator+@JsonProperty か record
  • 内部クラスは static を付ける
  • ParameterNamesModule は -parameters でコンパイルしたときだけ効く

参考・出典

確認日はいずれも 2026年10月11日です。

  • FasterXML「jackson-annotations」README(@JsonCreator・@JsonTypeInfo):https://github.com/FasterXML/jackson-annotations

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Jackson Cannot construct instanceの直し方」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?