HttpMethod.Delete не работает с RestTemplate из Spring-Android
Я пытаюсь использовать метод удаления HttpMethod. Код, который я использую для этого
response = restTemplate.exchange(url, HttpMethod.DELETE, requestEntity, Response.class);
Я также использую JacksonJson для картирования JSON. Функция удаления возвращает json, который должен быть сопоставлен с классом Response. Но вызов вышеуказанной строки не работает и выдает внутреннюю ошибку сервера с 500 в качестве кода ответа. Но тот же API работает с RESTClient в браузере, так что я думаю, что есть что-то, что я делаю неправильно.
2 ответа
После еще нескольких исследований кажется, что метод DELETE не поддерживает тело запроса. Поскольку у нас был контроль над REST API, мы изменили тело запроса для добавления в качестве параметров. После внесения этого изменения запрос работает правильно.
Надеюсь, это поможет кому-то.
Немного опоздал на вечеринку, которую я тоже хотел бы здесь принять (документируйте мое решение для потомков)
Я тоже использую шаблон отдыха Spring, также пытаюсь выполнить запрос на удаление с полезной нагрузкой И я также хотел бы иметь возможность получить код ответа со стороны сервера
Отказ от ответственности: я на Java 7
Мое решение также основано на посте здесь на SO, в основном вы сначала объявляете запрос POST и добавляете заголовок http для переопределения метода запроса:
RestTemplate tpl = new RestTemplate();
/*
* http://bugs.java.com/view_bug.do?bug_id=7157360
* As long as we are using java 7 we cannot expect output for delete
* */
HttpHeaders headers = new HttpHeaders();
headers.add("X-HTTP-Method-Override", "DELETE");
HttpEntity<Collection<String>> request = new HttpEntity<Collection<String>>(payload, headers);
ResponseEntity<String> exchange = tpl.exchange(uri, HttpMethod.POST, request, String.class);