我的代码如下:
控制者
@RequestMapping(value="/setTest", method=RequestMethod.POST, consumes="application/json") public @ResponseBody ModelMap setTest(@RequestBody List<TestS> refunds, ModelMap map) { for(TestS r : refunds) { System.out.println(r.getName()); } // other codes }
TestS pojo
public class TestS implements Serializable { private String name; private String age; //getter setter }
杰森的要求
var z = '[{"name":"1","age":"2"},{"name":"1","age":"3"}]'; $.ajax({ url: "/setTest", data: z, type: "POST", dataType:"json", contentType:'application/json' });
出现此错误
java.lang.ClassCastException:无法将java.util.LinkedHashMap强制转换为com.air.cidb.entities.TestS
我正在使用 Spring 3.1.2 和 Jackson 2.0.4
编辑: 我想在我的控制器方法中接收TestS对象的列表,并对其进行处理。我找不到发送错误的json或方法签名错误的信息。
这是对我有用的代码。关键是您需要一个包装器类。
public class Person { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; }
PersonWrapper类
public class PersonWrapper { private List<Person> persons; /** * @return the persons */ public List<Person> getPersons() { return persons; } /** * @param persons the persons to set */ public void setPersons(List<Person> persons) { this.persons = persons; } }
我的控制器方法
@RequestMapping(value="person", method=RequestMethod.POST,consumes="application/json",produces="application/json") @ResponseBody public List<String> savePerson(@RequestBody PersonWrapper wrapper) { List<String> response = new ArrayList<String>(); for (Person person: wrapper.getPersons()){ personService.save(person); response.add("Saved person: " + person.toString()); } return response; }
发送的请求是POST中的json
{"persons":[{"name":"shail1","age":"2"},{"name":"shail2","age":"3"}]}
回应是
["Saved person: Person [name=shail1, age=2]","Saved person: Person [name=shail2, age=3]"]