#java #jquery #ajax #spring #post
#java #jquery #ajax #весна #Публикация
Вопрос:
Я пытаюсь отправить большую форму данных на свою серверную часть, используя jQuery AJAX и отправляя ее в службу RESTful, созданную в Spring Framework. И форма в виде массивов неизвестных размеров, поэтому я пытаюсь заставить автоматическую сериализацию работать. Но я даже не могу заставить его работать с простым тестовым примером.
Похоже, он не может сопоставить мой файл JSON с классом ввода. Так что я, должно быть, делаю что-то не так. Но я не смог понять, что я делаю неправильно, основываясь на руководствах, которым я пытался следовать.
Вот мой вызов AJAX
var test = JSON.stringify({
name : "hallo", lastname : "there"
});
console.log(test);
$.ajax({
type: "POST",
url: "/SpringTest_war_exploded/test",
contentType: "application/json",
data: test,
success: function (returnValue) {
console.log("success");
console.log(returnValue);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log (XMLHttpRequest);
alert("Request: " XMLHttpRequest.toString() "nnStatus: " textStatus "nnError: " errorThrown);
}
});
Вот мой метод на стороне сервера.
@PostMapping(value = "/test", consumes = "application/json")
@ResponseBody
public String testajax(@RequestBody TestAutoCreate test){
System.out.println("testajax");
System.out.println(test.getName());
return "hallo";
}
Вот класс, с которым я пытаюсь его сопоставить
public class TestAutoCreate {
private String name;
private String lastname;
public TestAutoCreate(String name, String lastname) {
this.name = name;
this.lastname = lastname;
}
// the getters and setters
...
}
И вот сообщение об ошибке, которое я получаю
The origin server is refusing to service the request because the payload is in a format not supported by this method on the target resource.
Если я удалю @RequestBody TestAutoCreate
тест из метода на стороне сервера, вызов будет работать нормально. Это всего лишь
Комментарии:
1. Попробуйте отправить
test
переменную без ее строки (отправьте объект JSON напрямую)
Ответ №1:
Проблема здесь
@PostMapping(value = "/test", consumes = "application/json")
@ResponseBody
public String testajax(@RequestBody TestAutoCreate test){
System.out.println("testajax");
System.out.println(test.getName());
return "hallo";
}
Это контроллер RESTful, но возвращает представление. Вы должны вернуть RESTful ответ, который имеет тип содержимого Content-Type: application/json
.
См. Пример полномочий: https://spring.io/guides/tutorials/rest /
Комментарии:
1. Я, скорее всего, не совсем уверен, что вы говорите, что я должен изменить? Как упоминалось в моем сообщении, если удалить входной параметр из «testajax», он возвращает строку «hallo» без проблем. Только когда я пытаюсь автоматически десериализовать его в класс «TestAutoCreate», я получаю сообщение об ошибке, в котором говорится, что не удалось найти соответствие моему запросу. И ссылка, которую вы отправляете, была одним из учебных пособий, на которые я ссылался, которому я пытался следовать. Но я новичок в Spring, и я признаю, что я не совсем уверен, что я делаю неправильно, по сравнению с учебником