SpringBoot WebTestClient - 如何在 graphql API 中使用 expectBody
Posted
技术标签:
【中文标题】SpringBoot WebTestClient - 如何在 graphql API 中使用 expectBody【英文标题】:SpringBoot WebTestClient - How to use expectBody in graphql API 【发布时间】:2020-06-24 15:42:18 【问题描述】:使用 REST API 和 Spring Boot WebTestClient,我可以轻松地从返回的 JSON 中获取解析的对象,如下所示:
Person person = webTestClient
.get()
.uri("/person/3")
.exchange()
.expectBody(Person.class))
.returnResult()
.getResponseBody();
使用 graphql,json 被包装在一个数据属性中,如下所示:
"data" :
"person" :
"name" : "Foo"
所以它不适用于
...
.expectBody(Person.class))
因为 JSON 解析器以“data”而不是“data.person”开头。
如何实现直接解析JSON结果并返回Person对象?
【问题讨论】:
【参考方案1】:GraphQL 具有默认的response 结构,任何成功的响应都会在data
块中返回,如下所示
"data": ... ,
"errors": [ ... ]
所以使用@JsonRootName(value = "person")
并使用UNWRAP_ROOT_VALUE
功能配置ObjectMapper
@JsonRootName(value = "person")
public class Person
// properties
ObjectMapper om = new ObjectMapper();
om.enable(SerializationFeature.WRAP_ROOT_VALUE);
om.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true)
【讨论】:
但是如何将它与 webtestclient 连接起来? 看到这个只需将ObjectMapper
设置为webtestclient
***.com/questions/43769301/…@Janning以上是关于SpringBoot WebTestClient - 如何在 graphql API 中使用 expectBody的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot WebTestClient - 如何在 graphql API 中使用 expectBody
spring boot:如何配置自动装配的 WebTestClient
WebTestClient - 带有 Spring Boot 和 Webflux 的 CORS
Spring boot - WebFlux - WebTestClient - 将响应转换为 responseEntity