Spring 3.2.0 と Jackson 2.1.1 を使用してオブジェクトの配列を逆シリアル化しているときに問題が発生しました。オブジェクトの配列でコントローラーをヒットすると、「Bean クラスをインスタンス化できませんでした。デフォルトのコンストラクターが見つかりません」がスローされます。私のPojoにはデフォルトのコンストラクタもあります。JSON処理用のディスパッチャーサーブレットで MappingJackson2HttpMessageConverterを使用しています。
ポジョ:
public class Student{
private String rollNum;
private String firstName;
private String lastName;
public Student(){
}
/**
* @return the firstName
*/
public String getFirstName() {
return firstName;
}
/**
* @param firstName the firstName to set
*/
public void setFirstName(String firstName) {
this.firstName = firstName;
}
/**
* @return the lastName
*/
public String getLastName() {
return lastName;
}
/**
* @param lastName the lastName to set
*/
public void setLastName(String lastName) {
this.lastName = lastName;
}
/**
* @return the rollNum
*/
public String getRollNum() {
return rollNum;
}
/**
* @param rollNum the rollNum to set
*/
public void setRollNum(String rollNum) {
this.rollNum = rollNum;
}
}
コントローラ クラス:
public @ResponseBody
String saveStudentName(
final @ModelAttribute Student[] student){
//code goes here
}
このサービスは、iOS アプリケーションによってヒットされます。単一のオブジェクト(@ModelAttribute Student Student)で同じサービスをヒットすると、正常に動作します。しかし、オブジェクトの配列でヒットすると、次のように例外がスローされます
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [[Lcom.student.pojo.Student;]: No default constructor found;
クライアント側の入力は
[{"rollNum":"12","firstName":"qweqw","lastName":"adsf"},{"rollNum":"23","firstName":"rty","lastName":"fghj"}]
クライアントは応答として以下のエラーを受け取ります
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x7522680 {NSDebugDescription=Invalid value around character 0.}
どこが間違っているのか教えてください。コントローラーのパラメーターが正しい場合、コントローラーに送信できる入力形式を教えてください。
前もって感謝します。