UnrecognizedPropertyException: Unrecognized field "email" (class User), not marked as ignorable (2 known properties: "id", "name"]) は、JSON に、Java のクラスに無い項目(この例では email)があったときの例外です。

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "email" (class J$User), not marked as ignorable (2 known properties: "id", "name"])
 at [Source: (String)"{"id":1,"name":"山田","email":"y@x"}"; line: 1, column: 30] (through reference chain: J$User["email"])

エラー文の中に、答えがそろっています。

エラー文の部分 分かること
Unrecognized field "email" JSON の、知らない項目の名前
(class J$User) 変換しようとしたクラス
2 known properties: "id", "name" Jackson が知っている項目の名前(クラス側の名前)
through reference chain: J$User["email"] 入れ子の JSON なら、どの階層か

Unrecognized field と known properties を見比べると、原因の多くは次のどれかです。

見比べた結果 原因 直し方
JSON にだけある項目(email) API の応答に項目が増えたなど @JsonIgnoreProperties(ignoreUnknown = true)、または設定で無視
user_name と userName 名前の書き方(スネークケース)が違う @JsonProperty("user_name")、または命名の設定
Id と id 大文字小文字が違う 名前を合わせる、または大文字小文字を区別しない設定
isActive と active boolean の getter の名前の決まり getter・setter に @JsonProperty("isActive")
user だけが知らない JSON が {"user": {...}} と包まれている 中身を取り出してから変換

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

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

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

原因① JSON にだけある項目 → 無視する

public class User { public int id; public String name; }
om.readValue("{\"id\":1,\"name\":\"山田\",\"email\":\"y@x\"}", User.class);   // 例外
直し方 書き方 結果
クラスに付ける @JsonIgnoreProperties(ignoreUnknown = true) User2{id=1, name=山田}
ObjectMapper 全体の設定 om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) User{id=1, name=山田}
JsonMapper を作るとき JsonMapper.builder().disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES).build() User{id=1, name=山田}

外部の API の応答を受け取るクラスは、知らない項目を無視しておくと、相手が項目を増やしても止まらずに済みます。 一方、自社の画面から送られる入力を受け取るクラスでは、知らない項目をエラーにしたほうが、打ち間違いに気づける場合もあります。どちらにするかは、クラスごとに決めます。

Spring Boot では、spring.jackson.deserialization.<機能の名前> のプロパティで DeserializationFeature を設定できることが、Spring Boot のドキュメントに載っています。

原因② user_name と userName(スネークケース)

Unrecognized field "user_name" (class J$User3), not marked as ignorable (2 known properties: "id", "userName"])
直し方 結果
フィールドに @JsonProperty("user_name") User4{id=1, userName=山田}
om.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE) User3{id=1, userName=山田}

API 全体がスネークケースなら命名の設定、一部の項目だけなら @JsonProperty が向いています。

ここで「知らない項目を無視する」設定にすると、例外は消えますが、userName は null のままになります。名前の違いが原因のときは、無視ではなく名前を合わせます。

原因③ 大文字小文字

Unrecognized field "Id" (class J$User), not marked as ignorable (2 known properties: "id", "name"])

Jackson は、既定では大文字小文字を区別しました。 MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES を有効にした JsonMapper では、{"Id":1} を id に入れられました。

原因④ boolean の isActive

public class Flag {
    private boolean isActive;
    public boolean isActive() { return isActive; }
    public void setActive(boolean v) { isActive = v; }
}
操作 結果
Java → JSON {"active":true}(is が取れた)
{"isActive":true} → Java Unrecognized field "isActive" ... (one known property: "active"])

getter の isActive() から、Jackson は項目の名前を active と判断しました。 JSON の名前を isActive にしたいときは、@JsonProperty("isActive") で名前を決めます。

@JsonProperty("isActive") を付けた場所 {"isActive":true} を読む Java → JSON
フィールド 読めた {"active":true,"isActive":true}(2つ出た)
getter と setter 読めた {"isActive":true}

フィールドだけに付けると、getter の active も残り、JSON に2つ出ました。 getter と setter に付けると1つになりました。

原因⑤ JSON が包まれている

{"user": {"id": 1, "name": "a"}}
→ Unrecognized field "user" (class J$User), not marked as ignorable (2 known properties: "id", "name"])

known properties に中身の項目(id・name)があり、user だけが知らないときは、JSON が1段包まれています。

JsonNode root = om.readTree(json);
User u = om.treeToValue(root.get("user"), User.class);     // User{id=1, name=a}

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

順番 確認すること 方法
1 知らない項目の名前 Unrecognized field "○○"
2 Jackson が知っている名前 known properties: ...
3 名前の違いか、本当に無い項目か スネークケース・大文字小文字・is
4 名前の違いなら @JsonProperty・命名の設定
5 本当に無い項目なら @JsonIgnoreProperties(ignoreUnknown = true)
6 包まれていないか readTree で中身を取り出す

よくある質問

Q. Jackson 3 でも同じですか。 A. この記事は Jackson 2.14(com.fasterxml.jackson.databind のパッケージ)で確かめました。Spring Boot のドキュメントによると、Jackson 3 ではパッケージが tools.jackson に変わっています(アノテーションは com.fasterxml.jackson.annotation のまま)。版を上げたときは、import と既定の設定を確かめます。

Q. ObjectMapper の基本の使い方は。 A. 既存の記事「Jackson ObjectMapperの使い方|JSON変換・日付・record」で扱っています。

まとめ

  • JSON に、クラスが知らない項目があった例外
  • Unrecognized field と known properties を見比べる
  • 本当に無い項目なら @JsonIgnoreProperties(ignoreUnknown = true)
  • 名前の違い(user_name・Id・isActive)なら、無視せずに名前を合わせる
  • {"user": {...}} のように包まれていたら、中身を取り出す

参考・出典

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

  • Spring Boot ドキュメント「Spring MVC」(Customize the Jackson JsonMapper):https://docs.spring.io/spring-boot/how-to/spring-mvc.html

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

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

株式会社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で一緒に開発しながら、 成長を楽しみませんか?