[解決済み] JsonMappingException: No suitable constructor found for type [simple type, class ]: can't instantiate from JSON object.
2022-01-27 16:18:31
質問
JSONリクエストを取得して処理しようとすると、以下のエラーが発生します。
org.codehaus.jackson.map.JsonMappingException: No suitable constructor found for type [simple type, class com.myweb.ApplesDO]: can't instantiate from JSON object (need to add/enable type information?).
以下は、私が送信しようとしているJSONです。
{
"applesDO" : [
{
"apple" : "Green Apple"
},
{
"apple" : "Red Apple"
}
]
}
Controllerでは、以下のようなメソッドシグネチャを持っています。
@RequestMapping("showApples.do")
public String getApples(@RequestBody final AllApplesDO applesRequest){
// Method Code
}
AllApplesDOは、ApplesDOのラッパーです。
public class AllApplesDO {
private List<ApplesDO> applesDO;
public List<ApplesDO> getApplesDO() {
return applesDO;
}
public void setApplesDO(List<ApplesDO> applesDO) {
this.applesDO = applesDO;
}
}
りんごDO。
public class ApplesDO {
private String apple;
public String getApple() {
return apple;
}
public void setApple(String appl) {
this.apple = apple;
}
public ApplesDO(CustomType custom){
//constructor Code
}
}
Jacksonでは、サブクラスのJSONをJavaオブジェクトに変換できないようです。JacksonがJSONをJavaオブジェクトに変換するための構成パラメータについて、ご教授ください。私はSpring Frameworkを使用しています。
EDIT: 上記のサンプルクラスでこの問題を引き起こしている主要なバグを含んでいます - 解決のために受理された答えをご覧ください。
解決方法は?
で、ようやく問題の正体に気がつきました。私が疑っていたように、ジャクソンの設定の問題ではありません。
実は、この問題は りんごDO クラスです。
public class ApplesDO {
private String apple;
public String getApple() {
return apple;
}
public void setApple(String apple) {
this.apple = apple;
}
public ApplesDO(CustomType custom) {
//constructor Code
}
}
このクラスにはカスタムコンストラクタが定義されており、それがデフォルトコンストラクタになっていました。ダミーのコンストラクタを導入することで、このエラーを解消することができました。
public class ApplesDO {
private String apple;
public String getApple() {
return apple;
}
public void setApple(String apple) {
this.apple = apple;
}
public ApplesDO(CustomType custom) {
//constructor Code
}
//Introducing the dummy constructor
public ApplesDO() {
}
}
関連
-
[解決済み】Android java.lang.IllegalStateException: Android java.lang.IllegalStateException: Could not execute method of the activity
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】Eclipseで「公開型 <<classname>> は独自のファイルで定義する必要があります」エラー【重複あり
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】CreateProcess error=2, The system cannot find file specified.
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)
-
[解決済み] JSONでnullを表現する
-
[解決済み】Jackson JSONマッパーでjava 8 java.timeをシリアライズ/デシリアライズする。
-
[解決済み] キャメルケースに有利なアンダースコアを克服したジャクソン氏
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javaパッケージが存在しないエラー
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】予期しない型エラー