Spring-GraphQL: источник иногда разрешается как объект, а иногда как LinkedHashMap.

исходный код:

      type Query {
    getAccounts: [Account]!
    getAccountById(accountId: ID!): Account
}

type Customer {
    id: ID!
    email: String!
    accounts: [Account]!
}

type Account {
    id: ID!
    balance: Float!
    customer: Customer!
}

Контроллер:

      @Controller
class AccountController {
    @QueryMapping
    fun getAccounts(): List<Account> = getAccounts()

    @QueryMapping
    fun getAccountById(@Argument accountId: String): Account? = getAccount(accountId)

    @SchemaMapping(typeName = "Account", field = "customer")
    fun getCustomerFromAccount(source: Account): Customer? = getCustomer(source.customerId)
}

data class Account(
    val id: UUID,
    val balance: BigDecimal,
    val customerId: UUID
) 
data class Customer(
    val id: UUID,
    val email: String
)

Заявление о проблеме

Когда я пытаюсь запросить

      query {
    getAccountById(accountId:"2e7a7e62-10fe-4d42-8806-889e7e7a1fa4"){
      balance
      customer {
          email
      }
  }
}

это работает, потому что аргумент метода разрешается какAccountтип.

Но если я попробую это,

      query {
    getAccounts{
      balance
      customer {
          email
      }
  }
}

Это не работает какgetCustomerFromAccountметодsourceаргумент ожидается какLinkedHashMapтип.

Что я делаю не так?

Трассировки стека:

      java.lang.IllegalStateException: Parameter [0] in public org.dripto.banking.graphql.aggregator.Customer org.dripto.banking.graphql.aggregator.AccountController.getCustomerFromAccount(org.dripto.banking.graphql.aggregator.Account):  does not match the source Object type 'class java.util.LinkedHashMap'.
    at org.springframework.graphql.data.method.annotation.support.SourceMethodArgumentResolver.resolveArgument(SourceMethodArgumentResolver.java:75) ~[spring-graphql-1.0.1.jar:1.0.1]
    at org.springframework.graphql.data.method.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:83) ~[spring-graphql-1.0.1.jar:1.0.1]
    at org.springframework.graphql.data.method.annotation.support.DataFetcherHandlerMethod.getMethodArgumentValues(DataFetcherHandlerMethod.java:170) ~[spring-graphql-1.0.1.jar:1.0.1]
    at org.springframework.graphql.data.method.annotation.support.DataFetcherHandlerMethod.invoke(DataFetcherHandlerMethod.java:115) ~[spring-graphql-1.0.1.jar:1.0.1]
    at org.springframework.graphql.data.method.annotation.support.AnnotatedControllerConfigurer$SchemaMappingDataFetcher.get(AnnotatedControllerConfigurer.java:514) ~[spring-graphql-1.0.1.jar:1.0.1]
    at org.springframework.graphql.execution.ContextDataFetcherDecorator.lambda$get$0(ContextDataFetcherDecorator.java:74) ~[spring-graphql-1.0.1.jar:1.0.1]
    at org.springframework.graphql.execution.ReactorContextManager.invokeCallable(ReactorContextManager.java:104) ~[spring-graphql-1.0.1.jar:1.0.1]
    at org.springframework.graphql.execution.ContextDataFetcherDecorator.get(ContextDataFetcherDecorator.java:73) ~[spring-graphql-1.0.1.jar:1.0.1]
    at graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:279) ~[graphql-java-18.2.jar:na]
    at graphql.execution.ExecutionStrategy.resolveFieldWithInfo(ExecutionStrategy.java:210) ~[graphql-java-18.2.jar:na]
    at graphql.execution.AsyncExecutionStrategy.execute(AsyncExecutionStrategy.java:60) ~[graphql-java-18.2.jar:na]
    at graphql.execution.ExecutionStrategy.completeValueForObject(ExecutionStrategy.java:667) ~[graphql-java-18.2.jar:na]

Версии

Версия Kotlin: 1.7.10 Spring Boot: 2.7.2 JDK: 17 (темурин)

0 ответов

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