【问题标题】:Can't post object from form by Ajax SpringMVC无法通过 Ajax SpringMVC 从表单中发布对象
【发布时间】:2018-11-13 01:07:29
【问题描述】:

如何通过 jquery ajax 将对象从表单发布到控制器? 我有对象用户:

private String name;
private int age;

public User(String name, int age) {
    this.name = name;
    this.age = age;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

我有控制器:

@RequestMapping(value = "/user", method = RequestMethod.POST)
public void createUser(@RequestBody User user) {
    System.out.println(user.getName());
}

我通过 jquery 生成表单:

function createForm() {
    $("body").append($('<form id="form1" method="POST"></form>'));
    $("form").append('<input type="text" id="name">');
    $("form").append('<input type="text" id="age">');
    $("form").append('<input type="button" onclick="formSubmit();" value="Ok">');}

我尝试通过 ajax 将数据获取到我的控制器:

function formSubmit() {
    $.ajax({
        type : "POST",
        url : 'rest/user',
        contentType : 'application/json',
        dataType : 'json',
        data : $('#form1').serialize(),
        success : function(data) {
            doAjax();
        }
    });
}

方法doAjax只是生成db的结果。

但它不起作用!

【问题讨论】:

    标签: java jquery ajax spring-mvc spring-boot


    【解决方案1】:

    原因是您将dataType设置为json,但data是纯字符串,因为您使用了$('#form1').serialize()

    为了获取数据,您需要在您的ajax 方法中删除dataType

    function formSubmit() {
        $.ajax({
            type : "POST",
            url : 'rest/user',
            contentType : 'application/json',
            //dataType : 'json',
            data : $('#form1').serialize(),
            success : function(data) {
                doAjax();
            }
        });
    }
    

    【讨论】:

    • 我得到了这个异常:警告:无法读取 HTTP 消息:org.springframework.http.converter.HttpMessageNotReadableException:缺少所需的请求正文:public void iful.edu.RestMVC.controller.SpringRestController.createUser (iful.edu.RestMVC.model.User)
    • @КолянДзьоба 在您的问题中添加您的弹簧控制器代码
    • 他是。在“我有控制器:”之后检查问题的顶部:
    • @КолянДзьоба 删除控制器中的 @RequestBody 并重试
    • 方法返回空值。我认为表单中的数据不会发布到控制器
    猜你喜欢
    • 2018-03-12
    • 2013-02-28
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多