Я пытаюсь отправить объект JSON из интерфейса в бэкэнд через jQuery AJAX.
Вызов ajax успешно выполняется по запрошенному пути "/ survey" с помощью метода POST.
Проблема в том, что мой @RequestBody final HmmSurveyForm hmmSurveyForm
имеет нулевые значения для моих полей «answer1» и «заголовок».
Когда я проверил запрос в Google Chrome, отправляется запрос разработчика:
Но ответ нулевой для заполненных полей из внешнего интерфейса:
У меня есть следующий код в интерфейсе:
postSurvey: function() {
$.ajax({
url: this.encodedContextPath + "/survey",
type: 'POST',
dataType: 'json',
contentType: 'application/json',
data: ACC.hmmSurvey.getJSONDataForSurvey(),
async: true,
success: function (response) {
console.info(response);
},
error: function (jqXHR, textStatus, errorThrown) {
console.info("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
}
Вы неправильно объявляете свое тело RQ в JS
var json = [];
json.push({"answer1": "1"});
json.push({"heading": "Test"});
console.info({"hmmSurveyForm": json});
который имеет корень hmmSurveyForm
как массив отдельных объектов, который не имеет никакого отношения к тому, что ожидает ваш бэкэнд.
Вы должны использовать приведенный ниже код;
var json = {};
json["answer1"] = "1";
json["heading"] = "Test";
console.info({"hmmSurveyForm": json});
Узнайте больше об объекте JSON в JS здесь
Это правильно. Мне не хватало JSON.stringify getJSONDataForSurvey: function () { var json = {}; json["answer1"] = "1"; json["heading"] = "Test"; return JSON.stringify(json); },
Спасибо.
@Kapparino, вы ведь передаете версию
JSON.stringify
отjson
, верно?