Преобразователь вложенных запросов Graphql Java

У меня есть вложенный запрос графа требований с преобразователем Java.

getAccounts(type: "01",transactionMonths: 12){
         accountNumber,
          openDate,
          productType,               
          accountTransactions(annualFee: True){
            amount,
            date
                }
      }

Как мы можем написать запрос в graphql и как написать java-преобразователь для вложенного запроса. Как получить аргументы вложенного запроса для передачи в мой jparepository. у меня есть тип учетной записи и тип транзакций, как показано ниже

type Account{
    accountNumber: String
    openDate: String
     type: String
     transactionMonths: String
     productType: String
     accountTransactions:[AccountTransaction]
}
type AccountTransaction{
    amount: String
    date:String
    annualFee:Boolean
}

Как я могу получить учетные транзакции в учетных записях, используя вложенный запрос с использованием преобразователя Java.

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

Ответы 1

Ответ принят как подходящий

Рассматривали ли вы реализацию GraphQLResolver, как описано для BookResolver в этом связь?

Если вы прочитаете приведенную выше ссылку, вы сможете написать что-то вроде этого:

public class AccountResolver implements GraphQLResolver<Account> {
   public Collection<AccountTransaction> accountTransactions(Account account,Boolean annualFee) {
       // put your business logic here that will call your jparepository
       // for a given account
   }
}

Что касается вашего java DTO, у вас должно быть что-то вроде этого:

public class Account {
    private String accountNumber;
    private String openDate;
    private String type;
    private String transactionMonths;
    private String productType;

    // Don't specify a field for your list of transactions here, it should
    // resolved by our AccountResolver

   public Account(String accountNumber, String openDate, String type, String transactionMonths, String productType) {
       this.accountNumber = accountNumber;
       this.openDate = openDate;
       this.type = type;
       this.transactionMonths = transactionMonths;
       this.productType = productType;
   }

   public String getAccountNumber() {
       return accountNumber;
   }

   public String getOpenDate() {
       return openDate;
   }

   public String getType() {
       return type;
   }

   public String getTransactionMonths() {
       return transactionMonths;
   }

   public String getProductType() {
       return productType;
   }

}

Позвольте мне немного пояснить код, относящийся к резольвер выше:

  • Вы создаете новый преобразователь для DTO своей учетной записи;
  • У него есть один метод с точно такой же подписью, что и ваше поле GraphQL в Account, а именно: аккаунтТранзакции, возвращающий сбор AccountTransaction.

Что касается Java DTO:

  • Он указывает все поля вашего типа GraphQL, но НЕТ поле, которое вы хотите, чтобы ваш преобразователь разрешал.

SpringBoot GraphQL автоматически подключит преобразователь, и он будет вызываться, если клиент запросит подробности об учетной записи и ее транзакциях.

Предполагая, что вы определили запрос GraphQL с именем учетные записи, который возвращает все учетные записи, следующий запрос GraphQL будет допустимым:

{
    accounts {
        accountNumber
        accountTransactions {
            amount
            date
            annualFee
        }
    }
}

Что, если он пойдет на один уровень глубже? что, если в accountTransactions есть другой объект, который необходимо получить?

craigmiller160 27.07.2020 23:40

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