RequestBody имеет значение null в контроллере - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь отправить объект JSON из внешнего интерфейса в бэкэнд через jQuery AJAX. Вызов ajax успешно выполняется по запрошенному пути "/ survey" методом POST. Проблема в том, что мой @RequestBody final HmmSurveyForm hmmSurveyForm имеет нулевые значения для моих полей "answer1" и "heading". При проверке запроса в Google Chrome отправляется запрос разработчика:

enter image description here

enter image description here

Но для заполненных полей из внешнего интерфейса ответ нулевой:

enter image description here

У меня следующий код во внешнем интерфейсе:

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
}

1 Ответ

0 голосов
/ 30 октября 2018

Вы неправильно объявляете свое тело RQ в JS

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});

Подробнее об объекте JSON в JS здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...