Ajax Запрос конечной точке Spring Boot не удалось прочитать HTTP MSG - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть ajax запрос на передачу данных в конечную точку пружинной загрузки. Однако я получаю следующую ошибку:

Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.applicationName.controller.EventController.deleteCalendarEvents(com.applicationName.model.Vacation,javax.servlet.http.HttpSession)

Вот мой Ajax Запрос:

$.ajax({
                    method: 'POST',
                    url: '/vacation/deleteEvents',
                    contentType: 'application/json; charset=utf-8;',
                    dataType: 'json',
                    data: JSON.stringify(vacation),
                    success: function (response) {
                        if (response !== "OK")
                            alert(response);
                        else
                            console.log(response);
                    },
                    error: function (e) {
                        console.log(e);
                    }
                });

А вот моя конечная точка Spring Boot:

    @RequestMapping(value = "/vacation/deleteEvents", method = RequestMethod.GET)
public String deleteCalendarEvents (@RequestBody Vacation vacation, HttpSession session){
    //code
}

Если я изменяю это на POST, я получаю сообщение об ошибке, в котором говорится, что я не могу опубликовать в GET, а читающие онлайн люди предлагают перейти в GET. Если у Вас есть предложения, пожалуйста, дайте мне знать. У меня такое ощущение, что мне не хватает основной концепции здесь. Спасибо. Я постараюсь любые предложения и размещать обновления.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

По сути, вы пытаетесь отправить что-то кому-то, кто готов принять GET. Это похоже на разговор по-английски с человеком, говорящим только по-итальянски ... Они не могут понимать друг друга.

Каковы бы ни были ваши причины, вы должны заставить свой клиент и сервер говорить на одном языке и использовать один и тот же туннель ... Если ваш клиент POST, ваш сервер должен принять POST. Если ваш клиент GET, ваш сервер должен принять GET.

$.ajax({
    method: 'POST',
    url: '/vacation/deleteEvents',
    contentType: 'application/json; charset=utf-8;',
    dataType: 'json',
    data: JSON.stringify(vacation),
    success: function (response) {
        if (response !== "OK")
            alert(response);
        else
            console.log(response);
    },
    error: function (e) {
        console.log(e);
    }
});

@RequestMapping(value = "/vacation/deleteEvents", method = RequestMethod.POST)
public String deleteCalendarEvents (@RequestBody Vacation vacation, HttpSession session){
    //code
}

Если вы хотите принять GET, тогда ваш клиент должен отправить запрос GET:

$.ajax({
    method: 'GET',
    url: '/vacation/deleteEvents',
    success: function (response) {
        if (response !== "OK")
            alert(response);
        else
            console.log(response);
    },
    error: function (e) {
        console.log(e);
    }
});

@RequestMapping(value = "/vacation/deleteEvents", method = RequestMethod.GET)
public String deleteCalendarEvents (HttpSession session){
    //code
}

Итак, вы должны POST, если вы хотите иметь возможность получить @RequestBody.

Но тогда, более RESTFul-ориентированным способом, вы можете отправить запрос DELETE:

$.ajax({
    method: 'DELETE',
    url: `/vacation/${vacation.id}`, // assuming your object vacation has an id field.
    success: function (response) {
        if (response !== "OK")
            alert(response);
        else
            console.log(response);
    },
    error: function (e) {
        console.log(e);
    }
});

@RequestMapping(value = "/vacation/{vacationId}", method = RequestMethod.DELETE)
public String deleteCalendarEvents (@PathVariable int vacationId, HttpSession session){
    //code
}

Надеюсь, это поможет вы

0 голосов
/ 06 февраля 2020
@RequestMapping(value = "/vacation/deleteEvents", method = RequestMethod.POST)
public String deleteCalendarEvents (@RequestBody Vacation vacation){
    //code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...