我有一个配置类来创建一个具有特定SSL设置的WebClient。服务中还有另一个WebClient bean,所以我使用了Qualifier annotation。在将其移动到配置类之前,所有设置都在工作,并且post请求成功,但现在如果我想将其用作Bean,则url和httpclient为null。
@Configuration
public class WebConfig {
@Bean
@Qualifier("sslClient")
public WebClient webClient(DeviceConfig config, Credentials credentials, HttpClientManager httpClientManager) {
HttpClient httpClient = httpClientManager.getHttpClient(credentials);
return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.baseUrl(config.url)
.build();
}
}
我想使用这个客户端的类看起来像这样:
@Service
@RequiredArgsConstructor
public class ApiClient {
@Qualifier("sslClient")
private final WebClient webClient;
public String postRequest(String body) {
return webClient.post()
.contentType(MediaType.APPLICATION_XML)
.bodyValue(body)
.retreive()
.bodyToMono(String.class)
.block()
}
}
当我尝试运行此方法时,我收到一条错误消息“无法解析URL”。
如果我从Bean中删除Qualifier,构建会抛出异常,所以很明显它使用的是这个WebClient,而不是另一个。我试图修改代码,将URL移动到postRequest方法,但随后发生了SSLHandshake异常,因为显然clientconnector设置丢失了。为什么Bean没有配置好的设置?
如果我在本地运行应用程序,并使用debug,我会看到url和clientconnector仍然存在于ApiClient webClient设置中。但在开发环境中,由于某种原因,它为null。
1条答案
按热度按时间wgx48brx1#
该字段缺少
@Autowired
注解。请使用而不是