[英]Spring boot - WebFlux - WebTestClient - convert response to responseEntity
我有一個 Reactive 控制器,它返回:
@ResponseBody
@GetMapping("/data")
public Mono<ResponseEntity<Data>> getData() {
//service call which returns Mono<Data> dataMono
Mono<ResponseEntity<Data>> responseEntityMono = dataMono
.map(data -> ResponseEntity.ok(data))
.doFinally(signalType -> {});
return responseEntityMono;
}
我正在使用WebTestClient
來測試這個端點,但我想提取黃瓜的響應實體以進一步驗證。
我試過這個:
@Autowired private WebTestClient webTestClient;
public ResponseEntity get() {
EntityExchangeResult < ResponseEntity > response = webTestClient.get()
.uri(uriBuilder ->
uriBuilder
.path(VISUALIZATION_URL)
.build())
.header("Accepts", "application/json")
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON_VALUE)
.expectBody(ResponseEntity.class)
.returnResult();
return response.getResponseBody();
}
但我收到一個錯誤。 我可以通過執行以下操作來獲取 JSON:
public String get() {
BodyContentSpec bodyContentSpec = webTestClient.get()
.uri(uriBuilder ->
uriBuilder
.path(URL)
.build())
.header("Accepts", "application/json")
.exchange()
.expectStatus().isOk()
.expectHeader().contentType(MediaType.APPLICATION_JSON_VALUE)
.expectBody();
return new String(bodyContentSpec.returnResult().getResponseBody());
}
但是我想看看我是否可以獲得整個ResponseEntity
以便我可以驗證標頭、緩存標頭和正文。
您將永遠無法在測試中獲得ResponseEntity
。 從exchange()
返回的WebTestClient.ResponseSpec
是從控制器檢查答案的唯一方法。 ResponseEntity
只是您在方法中返回的對象,但是一旦 Jackson 對其進行序列化,它就會轉換為常規 HTTP 響應(在您的情況下,他的正文中包含 JSON 和常規 HTTP 標頭)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.