【发布时间】:2019-06-03 20:46:54
【问题描述】:
我的应用程序对 2 个不同的 Web 服务进行 REST 调用。第一个使用基本身份验证,第二个不使用。我想定义一个配置了基本身份验证凭据的 RestTemplateBuilder bean,并将其用于基本身份验证情况,并将默认 Spring 配置的 RestTemplateBuilder 用于非基本身份验证情况。
但定义自定义 RestTemplateBuilder bean 时上下文加载失败(详情如下)。
豆定义:
@Configuration
class RestTemplateBuilderConfig {
@Bean
public RestTemplateBuilder customRestTemplateBuilder(RestTemplateBuilder springConfiguredRestTemplateBuilder) {
return
springConfiguredRestTemplateBuilder
.basicAuthentication("user", "password");
}
}
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
上下文加载失败:
***************************
APPLICATION FAILED TO START
***************************
Description:
The dependencies of some of the beans in the application context form a cycle:
┌─────┐
| customRestTemplateBuilder defined in class path resource [com/example/demo/RestTemplateBuilderConfig.class]
└─────┘
据我了解,spring 初始化的 bean 应该被注入到customRestTemplateBuilder(...) 并且返回值应该产生一个名为 customRestTemplateBuilder 的新 bean。感谢任何关于可能出现问题的指示?
this question 的答案建议定义 RestTemplate bean。但这会阻止在我的测试中使用RestClientTest。
我可以将 Spring 初始化的 RestTemplateBuilder 注入到我的服务中,并在每个服务中的 restTemplateBuilder.build() 之前设置凭据。但是设置凭据的逻辑将分布在服务之间(违反 DRY)。
定义一个新的 RestTemplateBuilder 解决了这个问题,但是 Spring 初始化丢失了。
@Bean
public RestTemplateBuilder customRestTemplateBuilder() {
return
new RestTemplateBuilder()
.basicAuthentication("user", "password");
}
【问题讨论】:
标签: java spring spring-boot