2015-05-08 7 views
11

In primavera RestTemplate stiamo avendo i seguenti metodi per l'eliminazione.C'è un modo per passare le informazioni di intestazione in Spring RestTemplate chiamata 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); 
    } 

Nessuno di questi metodi ha alcun posto dove passare le informazioni di intestazione. C'è qualche altro metodo che può essere utilizzato per la richiesta DELETE con informazioni di intestazione?

risposta

14

È possibile utilizzare il metodo exchange (che prende qualsiasi tipo di richiesta HTTP), piuttosto che utilizzare il metodo delete:

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

Sei sicuro che questo funzionerà. Per quanto ne so, HttpMethod.DELETE non può avere un corpo. – Zeeshan

+1

Funziona bene per noi. Non ha un corpo: solo intestazioni, che sono permesse in qualsiasi messaggio HTTP. –

3

è possibile implementare ClientHttpRequestInterceptor e impostarlo per il vostro restTemplate. Nel vostro intercettore:

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

nella configurazione:

restTemplate.setInterceptors(...) 
Problemi correlati