-2

我有一个反应式控制器,它返回:

@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,以便我可以验证标头、缓存标头和正文。

4

1 回答 1

0

您将永远无法ResponseEntity在测试中获得 a。WebTestClient.ResponseSpec返回 fromexchange()是检查控制器答案的唯一方法。ResponseEntity只是您在方法中返回的对象,但是一旦 Jackson 序列化它,它就会转换为常规 HTTP 响应(在您的情况下,他的正文中包含 JSON 和常规 HTTP 标头)。

于 2021-10-12T13:21:46.027 回答