Как исправить загрузочный контроллер Spring, получающий нулевые данные из запроса AJAX DELETE?

Я пытался использовать @QueryParam, @PathVariable и @RequestParam, но мой контроллер не получает запрос данных от вызова AJAX. У меня такой же подход с другими моими методами. Только запрос DELETE не работает, и я получаю нулевое значение. Я сослался на этот Метод удаления Ajax при весенней загрузке, но он у меня не работает.

//AJAX DELETE
var id = {"id":$("#deleteUserIdInput").val()};

$("#deleteUserModal").modal("hide");

$.ajax({
    url : "http://localhost:3000/delete-user",
    datatype : "json",
    method : "DELETE",
    data : id,
    contentType : "application/json",
    error:function(data){
        console.info(data.entity);
    }
}).done(function(data) {
        console.info(data.entity)
    }
);

//Controller
//http://localhost:3000/delete-user
@RequestMapping(value = "/delete-user", method = RequestMethod.DELETE)
@ResponseBody
public Integer deleteUser(@QueryParam("id") Integer id){
    return id;
}

Я проверяю данные перед передачей запроса, и они не равны нулю. Я ожидаю, что данные, переданные в запрос, будут возвращены, например 1, но я получаю неопределенность.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
711
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Похоже, вы отправляете идентификатор в качестве тела вашего запроса. Это означает, что вам нужно, чтобы ваш метод deleteUser получал тело в качестве параметра.

Я предлагаю вам УДАЛИТЬ с определенного URL-адреса, например http://локальный:3000/пользователи/{id}.

Соответствующее объявление метода становится:

@DeleteMapping("/users/{id}")
@ResponseBody
public Integer deleteUser(@PathVariable("id") Integer id){
    return id;
}

И ваш JS нужно будет изменить (я думаю, я не силен в JS) на что-то вроде (опять же - я не специалист по JS, извините, если это ужасно!):

$.ajax({
    url : "http://localhost:3000/users/" + $("#deleteUserIdInput").val(),
    datatype : "json",
    method : "DELETE",
    contentType : "application/json",
    error:function(data){
        console.info(data.entity);
    }
}).done(function(data) {
        console.info(data.entity)
    }
);

Это сработало. Сначала я попробовал @PathVariable перед другими аннотациями, и это не работает, но теперь оно работает. Я не знаю, почему XD. Спасибо за помощь!

Renzchler 26.03.2019 03:36

@Renzchler Когда вы используете @QueryParam("id"), вам нужно передать ключ и значение в качестве параметра URL-адреса, а не в виде тела, добавив ?key=value к URL-адресу. Итак, ваш исходный запрос ajax должен был выглядеть так: "http://localhost:3000/delete-users?id = " + $("#deleteUserIdInput").val()

Incognito 16.08.2019 21:43

Я думаю, вы не можете получить ценность, может быть, это servre cors。 вы можете настроить корс?

первый запрос может получить значение для запроса на удаление, на самом деле запрос на удаление является cors Virtual requst, ajax подтверждает, что ваш сервер в порядке, может ли ajax продолжить отправку agin.

вы можете изменить почтовый запрос, а на сервере изменить сообщение, чтобы получить ваш запрос.

Да, братан, я правильно настроил конфигурацию CORS, и единственный метод, который не работает, — это DELETE, но теперь он работает XD. Спасибо за помощь!

Renzchler 26.03.2019 03:37

я вижу, вы вставляете javascript, значение получения сервера не определено, может быть, значение отправки вашего скрипта не определено, а не проблема с сервером。

votouch 26.03.2019 03:44

вы можете изменить запрос на отправку скрипта, а запрос сервера получить тело метода @parthPathVariable и тело данных скрипта json{"you PathVariable value":"value"}.

votouch 26.03.2019 03:46

Другие вопросы по теме