我在 Spring Boot 專案中作業,我想用 Interceptors 實體化一個 Restemplate Bean,我的問題是我不想復制代碼,因為每個配置都會更改標題。這是我的代碼:
@Bean
@Qualifier("restTemplateOne")
public RestTemplate restTemplateWithAccessToken() {
return new RestTemplateBuilder()
.interceptors((HttpRequest request, byte[] body, ClientHttpRequestExecution execution) -> {
//this is the only header that i want to add for
request.getHeaders().set("MY_PARTICULAR_HEADER", "my value");
request.getHeaders().set(HttpHeaders.AUTHORIZATION,"my auth value");
return execution.execute(request, body);
}).build();
}
@Bean
@Qualifier("restTemplateTwo")
public RestTemplate restTemplateWithIdToken() {
return new RestTemplateBuilder()
.interceptors((HttpRequest request, byte[] body, ClientHttpRequestExecution execution) -> {
request.getHeaders().set(HttpHeaders.AUTHORIZATION,"my auth value");
return execution.execute(request, body);
}).build();
}
@Autowired
@Qualifier("restTemplateOne")
private RestTemplate restTemplateOne;
@Autowired
@Qualifier("restTemplateTwo")
private RestTemplate restTemplateTwo;
你知道我如何優化代碼以避免重復。例如向方法添加引數并根據條件添加或不添加標頭。
提前致謝。
uj5u.com熱心網友回復:
只需提取并引數化您的攔截器:
@Bean
@Qualifier("restTemplateOne")
public RestTemplate restTemplateWithAccessToken() {
return new RestTemplateBuilder()
.interceptors(new CustomClientHttpRequestInterceptor(true))
.build();
}
@Bean
@Qualifier("restTemplateTwo")
public RestTemplate restTemplateWithIdToken() {
return new RestTemplateBuilder()
.interceptors(new CustomClientHttpRequestInterceptor(false))
.build();
}
private static class CustomClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {
private boolean needParticularHeader;
public CustomClientHttpRequestInterceptor(boolean needParticularHeader) {
this.needParticularHeader = needParticularHeader;
}
@Override
public ClientHttpResponse intercept(HttpRequest request,
byte[] body,
ClientHttpRequestExecution execution) throws IOException {
if (needParticularHeader) {
//this is the only header that i want to add for
request.getHeaders().set("MY_PARTICULAR_HEADER", "my value");
}
request.getHeaders().set(HttpHeaders.AUTHORIZATION, "my auth value");
return execution.execute(request, body);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477151.html
上一篇:如何使用SpringdataJPA和Hibernate添加復合外鍵?
下一篇:展開一維numpy陣列
