JSON リクエストを取得して処理しようとすると、次のエラーが発生します。
org.codehaus.jackson.map.JsonMappingException: 型 [単純型、クラス com.myweb.ApplesDO] に適したコンストラクターが見つかりません: JSON オブジェクトからインスタンス化できません (型情報を追加/有効化する必要がありますか?)
送信しようとしている JSON は次のとおりです。
{
"applesDO" : [
{
"apple" : "Green Apple"
},
{
"apple" : "Red Apple"
}
]
}
コントローラーには、次のメソッド シグネチャがあります。
@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;
}
}
ApplesDO:
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 を使用しています。
編集: 上記のサンプル クラスにこの問題の原因となっている主要なバグが含まれています - 解決策については、承認された回答を参照してください。
ベストアンサー1
それで、ようやく問題が何であるかが分かりました。私が疑っていたように、これは Jackson の設定の問題ではありませんでした。
実際、問題はApplesDOクラスにありました:
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() {
}
}