Есть ли способ передать информацию заголовка в Spring вызов RestTemplate DELETE
В Spring RestTemplate
мы используем следующие методы для удаления.
@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);
}
Ни один из этих методов не имеет места для передачи информации заголовка. Есть ли другой метод, который можно использовать для запроса DELETE
с информацией заголовка?
Ответы
Ответ 1
Вы можете использовать метод exchange
(который принимает любой тип HTTP-запроса), а не использовать метод 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);
Ответ 2
Вы можете реализовать ClientHttpRequestInterceptor
и установить его для restTemplate
. В вашем перехватчике:
@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);
}
}
В вашей конфигурации:
restTemplate.setInterceptors(...)