使用 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对象?
GraphQL 默认为 response结构和任何成功的响应都会在 data
block 中返回,如下所示
{
"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)
我是一名优秀的程序员,十分优秀!