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);
Другие вопросы по тегам