Метод POST AJAX для Spring RestAPI не работает

#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, и я признаю, что я не совсем уверен, что я делаю неправильно, по сравнению с учебником