无法从ajax调用向MVC控制器发送JSON数据

时间:2016-04-02 20:38:28

标签: java json ajax spring model-view-controller

我正在尝试从一个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是不行的。

4 个答案:

答案 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控制器中使用一个对象。

有两种方法可以让它发挥作用:

  • 接受名称 - 值而不是TestDao对象的地图。
  • 在Javascript中编写一个函数,将表单的名称值转换为TestDao形式的对象

答案 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作为内容协商者处理。