25

In Spring RestTemplate we are having the following methods for delete.

@Override
    public void delete(String url, Object... urlVariables) throws RestClientException {
        execute(url, HttpMethod.DELETE, null, null, urlVariables);
    }

    @Override
    public void delete(String url, Map<String, ?> urlVariables) throws RestClientException {
        execute(url, HttpMethod.DELETE, null, null, urlVariables);
    }

    @Override
    public void delete(URI url) throws RestClientException {
        execute(url, HttpMethod.DELETE, null, null);
    }

None of these methods are having any place to pass header information. Is there any other method which can be used for DELETE request with header information?

Zeeshan
  • 11,851
  • 21
  • 73
  • 98

2 Answers2

38

You can use the exchange method (which takes any HTTP request type), rather than using the delete method:

MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("X-XSRF-HEADER", "BlahBlah");
headers.add("Authorization", "Basic " + blahblah);
etc...

HttpEntity<?> request = new HttpEntity<Object>(headers);
restTemplate.exchange(url, HttpMethod.DELETE, request, String.class);
David Lavender
  • 8,021
  • 3
  • 35
  • 55
7

You can implement ClientHttpRequestInterceptor and set it for your restTemplate. In your interceptor:

 @Override
public ClientHttpResponse intercept(
        HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
        throws IOException {
        @Override
        public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
            if (request.getMethod() == HttpMethod.DELETE){
                request.getHeaders().add(headerName, headerValue); 
             }

             return execution.execute(request, body);
        }
}

In your config:

restTemplate.setInterceptors(...)
jny
  • 8,007
  • 3
  • 37
  • 56