【问题标题】:Is there a way to pass header information in Spring RestTemplate DELETE call有没有办法在 Spring RestTemplate DELETE 调用中传递标头信息
【发布时间】:2015-05-08 11:44:31
【问题描述】:

在 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请求头信息?

【问题讨论】:

    标签: java spring web-services rest resttemplate


    【解决方案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);
    

    【讨论】:

    • 你确定这会起作用吗?据我所知,HttpMethod.DELETE是不允许有body的。
    • 它对我们来说很好用。它没有正文:只有标头,在任何 HTTP 消息中都允许。
    【解决方案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(...)
    

    【讨论】:

    • 当您需要将标题添加到大量调用或每个调用时,这是一个更好的解决方案。它的代码要少得多。
    猜你喜欢
    • 2014-12-17
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2017-02-13
    相关资源
    最近更新 更多