簡體   English   中英

Spring boot - WebFlux - WebTestClient - 將響應轉換為 responseEntity

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM