我正在尝试通过jQuery AJAX从前端向后端发送JSON对象。
使用POST方法在请求的路径“ / survey”上成功执行ajax调用。
问题是,我的@RequestBody final HmmSurveyForm hmmSurveyForm字段“ answer1”和“ heading”的值为空。
当我在Google chrome浏览器中检查请求时,发送了请求:

javascript -  Controller 中的RequestBody为null-LMLPHP

javascript -  Controller 中的RequestBody为null-LMLPHP

但是对于前端的填充字段,响应为null:

javascript -  Controller 中的RequestBody为null-LMLPHP

我在前端有以下代码:

postSurvey: function() {
        $.ajax({
            url: this.encodedContextPath + "/survey",
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            data: ACC.hmmSurvey.getJSONDataForSurvey(),
            async: true,
            success: function (response) {
                console.log(response);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.log("The following error occurred: " + textStatus, errorThrown);
            }
        });
}

getJSONDataForSurvey: function () {
        var json = [];

        json.push({"answer1": "1"});
        json.push({"heading": "Test"});

        return JSON.stringify({"hmmSurveyForm": json});
}


在后端:

@RequestMapping(value = "/survey", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody HmmSurveyForm postSurvey(@RequestBody final HmmSurveyForm hmmSurveyForm, final Model model) {
    System.out.println(hmmSurveyForm);
    return hmmSurveyForm;
}

public class HmmSurveyForm {

    private String heading;
    private String answer1;

    // getter, setters
}

最佳答案

您在JS中错误地声明了RQ主体



var json = [];
json.push({"answer1": "1"});
json.push({"heading": "Test"});
console.log({"hmmSurveyForm": json});





它的根hmmSurveyForm作为不同对象的数组,与您的后端期望无关。

您应该使用下面的代码;



var json = {};
json["answer1"] = "1";
json["heading"] = "Test";
console.log({"hmmSurveyForm": json});





在JS here中检查有关JSON对象的更多信息

08-07 08:50