Карта вывода GraphQl с Spring-boot для проблемы с данными

Мне нужно сопоставить ответ графа с объектом данных. Но в итоге данные нулевые.

String document = """
   query {
    entries(entry_ids: "12CA") {
        rcsb_id
        rcsb_accession_info {
            initial_release_date
        }
        audit_author {
            name
        }
        rcsb_primary_citation {
            pdbx_database_id_PubMed
            pdbx_database_id_DOI
        }
   }
   }""";
 
ClientGraphQlResponse response = graphQlClient.document("document").executeSync();
        System.out.println("response: " + response);
        ClientResponseField field = response.field("data");
        System.out.println("field: " + field);
        Data data  = field.toEntity(Data.class);
        System.out.println("data: " + data);

Результат:

ответ: {data = {entries=[{rcsb_id=12CA, rcsb_accession_info = {initial_release_date=1992-10-15T00:00:00Z}, Audit_author=[{name=Наир, С.К.}, {name=Кристиансон, Д.В.}], rcsb_primary_citation = {pdbx_database_id_PubMed=1910042, pdbx_database_id_DOI=null}}]}}

поле: org.springframework.graphql.client.DefaultClientResponseField@540b91dc

данные: ноль

Мои объекты данных:


@lombok.Data
public class Data {
    public List<Entries> entries;
}
@Data
public class Entries {
 
    public String rcsb_id;
    public RcsbAccessionInfo  rcsb_accession_info;
    public List<AuditAuthor> audit_author;
    public RcsbPrimaryCitation rcsb_primary_citation;
}
@Data
public class RcsbAccessionInfo {
    public String initial_release_date;
}
@Data
public class AuditAuthor {
    public String name;
}
@Data
public class RcsbPrimaryCitation {
    public Integer pdbx_database_id_PubMed;
    public String pdbx_database_id_DOI;
}

Где я ошибаюсь?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, вам нужно получить объект Entries.class или Entries[].class. Мне кажется, что объект Data является внутренним объектом GraphQL.

Data data  = field.toEntity(Entries[].class);

Я попробовал изменить Entries data = field.toEntity(Entries.class), но ничего не изменилось. данные равны нулю

Enrico Morelli 30.05.2024 13:45

Проверьте, что вы отправили не нулевой объект. Дайте нам доказательства, пожалуйста

Alex 30.05.2024 17:06

Доказательством являются выходные данные, которые я отправил. Ответ сервера: ответ: {data = {entries=[{rcsb_id=12CA, rcsb_accession_info = {initial_release_date=1992-10-15T00:00:0‌​0Z}, audit_author=[{name=Nair, S.K.}, {name=Christianson, D.W.}], rcsb_primary_citation = {pdbx_database_id_PubMed=1910042, pdbx_database_id_DOI=null}}]}} и поле org.springframework.graphql.client.DefaultClientResponseFiel‌​d@540b91dc.

Enrico Morelli 31.05.2024 08:49

@EnricoMorelli Наверное, мы не понимаем друг друга. То, что вы показываете, — это ответ, который получил ваш клиент. Он получает что-то, отправленное сервером. Я спросил, какой объект прислал сервер. Его можно найти из журнала сервера, Wireshark или другого независимого метода. Ваш клиент может ошибаться, поэтому я не доверяю его выводам. Или может быть прав, в этом случае требуемый объект не был отправлен сервером

Alex 31.05.2024 12:12

Ответ сервера представляет собой объект JSon. Используя страницу сервера, где я могу протестировать запрос графа, результат: { "data": { "entries": [ { "rcsb_id": "12CA", "rcsb_accession_info": { "initial_release_date": "1992-10-15T00:00:00Z" }, "audit_author": [ { "name": "Nair, S.K." }, { "name": "Christianson, D.W." } ], "rcsb_primary_citation": { "pdbx_database_id_PubMed": 1910042, "pdbx_database_id_DOI": null }}]}}

Enrico Morelli 31.05.2024 15:52
Ответ принят как подходящий

В конце концов, решение очень простое.

Data data = response.toEntity(Data.class);

Другие вопросы по теме