SpringBoot WebTestClient - Как использовать waitBody в API GraphQl - PullRequest
1 голос
/ 12 марта 2020

С помощью 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 Ответ

0 голосов
/ 12 марта 2020

GraphQL имеет структуру по умолчанию response , и любой успешный ответ возвращается в блоке data, как показано ниже

{
  "data": { ... },
  "errors": [ ... ]
 }

Поэтому используйте @JsonRootName(value = "person") и настройте ObjectMapper с UNWRAP_ROOT_VALUE функция

@JsonRootName(value = "person")
public class Person {

  // properties

  }

 ObjectMapper om = new ObjectMapper();
 om.enable(SerializationFeature.WRAP_ROOT_VALUE);
 om.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...