Вы ошиблись порядком инициализации:
@Service
public class DummyWebclient {
@Autowired
private WebClient getWebClient;
public DummyWebclient() {}
Response client3 = getWebClient.get().
uri(uriBuilder -> uriBuilder
.queryParam("param1", "value1")
.queryParam("param2", "value2")
.build() )
.retrieve()
.bodyToMono(Response.class)
.block();
public Response getClient3() {
return client3;
}
}
С вашим текущим кодом:
- создан новый экземпляр DummyWebClient
- все поля инициализированы к их значениям по умолчанию
- getWebClient в null
- попытка инициализации client3: BOOM
- только после этого Spring попытается вставить поля
У вас есть 2 варианта, чтобы это исправить:
Option1
Использовать инжекцию конструктора:
private WebClient getWebClient;
@Autowired
public DummyWebClient(WebClient getWebClient) {
this.getWebClient = getWebClient;
}
В любом случае, это хорошая идея
Опция 2
Вы делаете блокирующий HTTP-вызов при инициализации поля. Почему бы не получить ответ по требованию, в getClient3()
вызов?
ИМХО, вы должны применить оба изменения.