2013-08-30 33 views
8

Próbuję użyć metody DELETE HttpMethod. Kod, którego używam do tego, jestHttpMethod.Delete nie działa z RestTemplate of Spring-Android

response = restTemplate.exchange(url, HttpMethod.DELETE, requestEntity, Response.class); 

Używam również JacksonJson do mapowania json. Funkcja delete zwraca json, który powinien zostać zmapowany do klasy Response. Ale wywołanie powyższej linii nie działa i daje wewnętrzny błąd serwera z 500 jako kod odpowiedzi. Ale ten sam interfejs API działa z RESTClient w przeglądarce, więc domyślam się, że jest coś, czego nie robię poprawnie.

Odpowiedz

8

Po wykonaniu kilku badań wydaje się, że metoda DELETE nie obsługuje treści żądania. Ponieważ mieliśmy kontrolę nad REST API, zmieniliśmy treść żądania, aby dodać je jako parametry. Po wykonaniu tej zmiany żądanie działa poprawnie.

Mam nadzieję, że komuś pomaga.

+5

Znalazłem rozwiązanie na tym [link] (http://knowledgebrowse.blogspot.com/2013/08/spring-resttemplate-calling-delete.html) działa dobrze dla przekazywania ciała żądania w poleceniu metody DELETE – Ujjwal

+0

Ujjwal, dziękuję, bardzo pomogłeś - to ostateczne rozwiązanie –

0

Trochę późno do partii chciałbym dostroić się również tutaj (dokument moje rozwiązanie dla potomności)

jestem zbyt odpoczynek przy użyciu szablonu sprężyna w również próby przeprowadzenia kasowania wniosek o ładowności I chciałbym również, aby być w stanie uzyskać kod odpowiedzi ze strony serwera

Oświadczenie: Jestem na Java 7

Moje rozwiązanie opiera się również na post tutaj na SO, w zasadzie początkowo zadeklarować żądanie POST i dodaj nagłówek http, aby zastąpić metodę żądania:

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);