2017-04-24 100 views
8

我目前使用擴展Spring RestTemplate的OAuth2RestOperations,我想指定內容類型標題。設置Spring RestTemplate的默認內容類型標題

我已經成功地做的唯一的事情是請求時明確設置我的頭:

public String getResult() { 
    String result = myRestTemplate.exchange(uri, HttpMethod.GET, generateJsonHeader(), String.class).getBody(); 
} 

private HttpEntity<String> generateJsonHeader() { 
    HttpHeaders headers = new HttpHeaders(); 
    headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); 
    return new HttpEntity<>("parameters", headers); 
} 

但它實際上將是巨大的,以便能夠設置一勞永逸豆初始化期間,並直接使用getforObject方法而不是交換。

回答

7

首先,你必須創建請求攔截器:

public class JsonMimeInterceptor implements ClientHttpRequestInterceptor { 

    @Override 
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, 
     ClientHttpRequestExecution execution) throws IOException { 
    HttpHeaders headers = request.getHeaders(); 
    headers.add("Accept", MediaType.APPLICATION_JSON); 
    return execution.execute(request, body); 
    } 
} 

...然後你有使用上面的攔截休息模板創建代碼:

@Configuration 
public class MyAppConfig { 

    @Bean 
    public RestTemplate restTemplate() { 
     RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory()); 
     restTemplate.setInterceptors(Collections.singletonList(new JsonMimeInterceptor())); 
     return restTemplate; 
    } 
} 

你可以繼承RestTemplate如果你要在您的應用程序中有一些其他專用或通用的REST模板。

相關問題