Spring控制器没有从JS文件获取JSON POST数据

时间:2013-07-25 23:11:50

标签: json spring-mvc

从我的JS文件中,我发布了这个JSON数据。

myPayload[0].id=1&myPayload[0].name=Me&myPayload[0].pId=2&myPayload[0].pName=Dad

YUI代码:

var formElements = YAHOO.util.Connect.setForm("myFormId");
alert("New form elements:" + formElements); // Alerting POST data as shown above

YAHOO.util.Connect.resetFormState();

YAHOO.util.Connect.asyncRequest("POST", "/mycontroller/save", {
    cache : false,
    success : function(res) {
        alert(res.responseText);
    },
    failure : function(res) {
        alert(res.responseText);
    }
}, formElements);

控制器代码:

@RequestMapping(value = "/save", method=RequestMethod.POST)
@ResponseBody
public String saveData(ModelMap mm, @ModelAttribute("myPayload") MyBean bean,  BindingResult errors) {

    log.info("save:Called");
    List<MyDTO> lst = bean.getList();
    log.info("save:Number of records:" + lst.size());

    return "Successfully Updated.";
}

Bean代码:

public class MyBean {

    private List<MyDTO> myPayload = new  AutoPopulatingList<MyDTO>(MyDTO.class);

    public List<MyDTO> getList() {
        return myPayload;
    }

    public void setList(List<MyDTO> mList) {
        this.myPayload = mList;
    }

}

该列表仍为空。 bean值也是空的。 我在这做错了什么?

1 个答案:

答案 0 :(得分:0)

嗯......这有用吗?

等表单中添加modelAttribute="contactForm"
< form:form method="post" action="your url" modelAttribute="myPayload" >

或使用@RequestBody

@RequestMapping(value = "/save", method=RequestMethod.POST)
@ResponseBody
public String saveData(ModelMap mm, @RequestBody MyBean bean,  BindingResult errors) {

顺便说一下,yui(我不熟悉js)可以将myPayload[0].id=1&myPayload[0].name=Me&myPayload[0].pId=2&myPayload[0].pName=Dad变为JSON吗?毕竟它不像普通的JSON。

<强>更新

@ModelAttribute解决方案: 将所有myPayload[x].foo=bar更改为list[x].foo=bar(如果列表是MyBean中的字段名称),并将modelAttribute="myPayload"保留在表单标记中。

@RequestBody解决方案:

如果您使用@RequestBody

,请添加杰克逊依赖
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.12</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.12</version>
</dependency>