假设我们有一个o.s.w.reactive.function.server.ServerResponse实例。

提取其主体内容的正确方法是什么,换句话说,如何实现fetchBodyAsString函数?

test(){
  ServerResponse response = getResponseFromService("mock data");

  String body = fetchBodyAsString(response);

  assertEquals("hello", body);
}


您能否详细说明一下为什么ServerResponse拥有所有方法(cookies(), headers(), statusCode())的方法,而响应主体却没有?我想应该有一种方法可以使用writeTo()方法获得尸体,尽管如何使用它绝对是个模糊的问题。

最佳答案

据我所知ServerResponse用于控制器或路由器功能。
为了进行测试,您可以使用WebTestClient

@Autowired
WebTestClient webTestClient;


@Test
void test() {

    webTestClient.get()
            .exchange()
            .expectStatus()
            .isOk()
            .expectHeader()
            .contentType(MediaType.APPLICATION_JSON)
            .expectBody()
            .jsonPath("data.name").isEqualTo("name");


}


要么

@Autowired
WebTestClient webTestClient;


@Test
void test() {

    FluxExchangeResult<String> result = webTestClient.get()
            .exchange()
            .returnResult(String.class);

    int rawStatusCode = result.getRawStatusCode();
    HttpStatus status = result.getStatus();
    HttpHeaders responseHeaders = result.getResponseHeaders();
    String stringResponseBody = result.getResponseBody().blockFirst();

}

09-26 21:00