我正在尝试从一个HTML表单中捕获数据并将其发送到MVC控制器,但下面的代码不起作用。有人可以帮我这里。
var form = JSON.stringify(jQuery('#project_form').serializeArray());
$.ajax({
contentType : "application/json; charset=utf-8",
dataType : "json",
type: "POST",
url: "/SE/doLogin",
data: form,
success: function(response){
window.location.href = response;
这是我的控制器
@RequestMapping(value = "/doLogin",method = RequestMethod.POST,consumes = "application/json",produces="text/plain")
@ResponseBody
public String sayHello(@RequestBody TestDao templateModel ){
System.out.println("say");
System.out.println(templateModel.getEmail());
TestMethod t1 = new TestMethod();
t1.getValues();
return "newsFeed";
}
当我没有保留任何争论时,它会起作用,并且S.o.p将在控制台上打印出来。我不确定@RequestBody是不行的。
答案 0 :(得分:0)
您可以定义一个Model对象来映射您的json对象。
@RequestMapping(value = "/doLogin",method = RequestMethod.POST,consumes = "application/json",produces="text/plain")
@ResponseBody
public String sayHello(@ModelAttribute TemplateModel templateModel ){
System.out.println("say");
System.out.println(templateModel.getEmail());
TestMethod t1 = new TestMethod();
t1.getValues();
return "newsFeed";
}
// This bean should map your json object.
public class TemplateModel{
private String email;
private String values;
}
答案 1 :(得分:0)
您的表单序列化只能生成键值对。所以你实际上不能在MVC控制器中使用一个对象。
有两种方法可以让它发挥作用:
答案 2 :(得分:0)
使用jquery对象序列化扩展从表单创建javascript对象。然后将其作为JSON发送给控制器。收集自here
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
像
一样使用它var form = JSON.stringify(jQuery('#project_form').serializeObject());
$.ajax({
contentType : "application/json; charset=utf-8",
dataType : "json",
type: "POST",
url: "/SE/doLogin",
data: form,
success: function(response){
window.location.href = response;
希望这会有所帮助。
答案 3 :(得分:0)
请确保依赖关系库中包含 Jakson jars 。如果您使用的是spring 4,框架将自动将内容协商器作为JSON获取,并在后台找到Jakson jar,将JSON传输到服务器并从服务器获取JSON数据
使用 JAXB jar ,以防您需要将XML作为内容协商者处理。