在Jquery Ajax调用中没有传递数据时,Spring中的Model Parameter的数据类型是什么?

时间:2016-08-05 16:13:15

标签: javascript jquery ajax spring spring-mvc

当使用Jquery Ajax Call为具有该名称的model参数传递任何内容时,Model Parameter的数据类型是什么?

考虑以下Jquery Ajax Post操作:

$.ajax({
    url: url,
    data: {'A':'a','B':'b'},
    cache: false,
    dataType: "json",
    type: "POST",
    success: function(data){
        if(data.success==true){
            alert('success');
        }else if(data.success==false){
            alert('Failed');
        }
    }
});

并遵循基于Spring注释的控制器定义

@RequestMapping(value = { "dummy" }, method = RequestMethod.POST)
    public @ResponseBody HashMap<Object, Object> createDiagram(@ModelAttribute(value = "A") Object a,@ModelAttribute(value = "B") Object b,@ModelAttribute(value = "C") Object c)
    {
boolean object=(c instanceof Object); // returns true;
boolean string=(c instanceof String); //returns false

//TODO: Need to check if c is null or if the value of 'C' was actually passed in Ajax Call
}

1 个答案:

答案 0 :(得分:0)

根据您的示例,您尝试使用POST方法向服务器发送匿名javascript对象。

为了使用@ModelAttribute注释实际绑定数据,当请求进入控制器时,您需要执行以下步骤:

在您的HTML中,您需要在输入标记,文本区域标记和其他表单标记中使用name属性。表单中的每个“element”标记应该与您尝试使用该name属性绑定的对象内的字段匹配。

例如:

假设您有一个类User.java,并且您正在尝试将数据绑定到它:

public class User {

    private String firstName;

    private String lastName;

    private String email;
}

所以你的表单应该包含3个带有匹配名称属性的输入标签:

<input type="text" name="firstName" />
<input type="text" name="lastName" />
<input type="text" name="email" />

现在,你的绑定实际上可以这样发生:

@RequestMapping(value = "/home", method = RequestMethod.POST)
public String goHome(@ModelAttribute User)
{
}

这是绑定问题。

现在对于 ajax ,首先需要获取HTML表单的数据。假设您的HTML表单上有myForm的id,然后:

var myData = $("#myForm").serialize();

现在,根据数据,您应该发送myData,如下所示:

$.ajax({
    url: url,
    data: myData,
    cache: false,
    dataType: "json",
    type: "POST",
success: function(data){
    if(data.success==true){
        alert('success');
    }else if(data.success==false){
        alert('Failed');
    }
}

});

return false;

URL应该是服务器的完整HTTP地址,如下所示:

http://localhost:8080/your_app/your_route

不要忘记在jquery ajax调用后立即返回false或任何其他值。这是完成ajax调用的正确方法。

ajax成功方法期望将任何类型的文本作为Spring的Controller的回复(更准确地说来自调度程序servlet)。

因此,在你的控制器中不要忘记使用@ResponseBody注释,这将告诉调度程序servlet不要尝试解析视图,而是返回方法的值作为HTML主体的一部分。

因此,如果您将返回任何字符串或JSON,它们将在HTTP响应正文中发送。