我正在嘗試將 Spring Boot 應用程式的一些集成測驗RestTemplate從WebClient. 目前,測驗使用自動裝配的實體TestRestTemplate
@Autowired
private TestRestTemplate restTemplate;
運行測驗時,restTemplate配置為使用與服務器運行相同的基本 URL 和(隨機選擇的)埠。
在我的一項測驗中,我登錄并保存授權回應標頭值以用于后續 API 呼叫。我嘗試將其遷移到WebClient喜歡的位置
WebClient webClient = WebClient.create()
var authResult = webClient.post()
.uri("/api/authenticate")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(new LoginDetails(username, password))
.retrieve()
.toBodilessEntity()
.block();
// save the token that was issued and use it for subsequent requests
this.authHeader = authResult.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
但是當我WebClient像這樣創建實體時,它沒有配置為使用與應用程式相同的埠。
我嘗試改用依賴注入的實體TestWebClient
@Autowired
private WebTestClient webTestClient;
這確實將 Web 客戶端連接到服務器(相同的基本 URL 和埠),但是WebTestClientAPI 與WebClient. 具體來說,它似乎只允許斷言回應的屬性,例如,您可以斷言特定的回應標頭值存在,但沒有辦法保存該標頭的值。
var authResult = webTestClient.post()
.uri("/api/authenticate")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(new LoginDetails(username, password))
.exchange()
.expectHeader()
.exists(HttpHeaders.AUTHORIZATION);
有沒有辦法:
- 創建一個
WebClient配置為使用與服務器相同的基本 URL 和埠的實體 - 創建一個
WebTestClient實體并訪問回應屬性(而不僅僅是斷言它們)
uj5u.com熱心網友回復:
您可以完全訪問WebTestClient結果:
webTestClient.post()
.uri("/api/authenticate")
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(new LoginDetails(username, password))
.exchange()
.expectHeader()
.exists(HttpHeaders.AUTHORIZATION)
.returnResult(Map.class);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/439921.html
上一篇:如何指定我的先例表格的物件?
