graphql servlet不是以graphql-java-tools开头的找不到模式文件吗?

问题描述

因此,根据graphql-java-kickstart / graphql-java-tools,当将依赖项“ com.graphql-java-kickstart:graphql-spring-boot-starter添加到project和.graphqls模式文件自动扫描。

我具有以下依赖性:

...
        <spring-boot.version>2.3.3.RELEASE</spring-boot.version>
        <graphql.version>7.0.1</graphql.version>
        <graphql-java-tools.version>6.2.0</graphql-java-tools.version>

...

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>

        <!-- graphql -->
        <dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphql-spring-boot-starter</artifactId>
            <version>${graphql.version}</version>
        </dependency>

        <dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphiql-spring-boot-starter</artifactId>
            <version>${graphql.version}</version>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphql-java-tools</artifactId>
            <version>${graphql-java-tools.version}</version>
        </dependency>

模式定义:

in query.graphqls:
type Query {
    user(username: String!)
    users: [User]
}

in user.graphqls:
type User {
    userId: Number!
    username: String!
}

还有一个GraphQLQueryResolver:

@Component
public class UserQueryResolver implements GraphQLQueryResolver {
    private final UserRepository userRepository;

    public UserQueryResolver(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public Iterable<User> users() {
        return this.userRepository.findAll();
    }

    public User user(String username) {
        return this.userRepository.findByUsername(username).orElseThrow();
    }
}

public interface UserRepository extends JpaRepository<User,Integer> {
    Optional<User> findByUsername(String username);
}

根据文档:

如果将graphql-spring-boot-starter添加为引导应用程序的依赖项,并且该应用程序中存在GraphQLSchema bean,则可以在/ graphql上访问servlet。查看简单示例,了解所需的最低限度。

当在类路径中找到受支持的graphql-java模式库时,也可以自动创建GraphQL模式。

graphql-java-tools库应在以下条件下自动创建模式:

所有GraphQLResolver和GraphQLScalar Bean,以及SchemaParserDictionary类型的Bean(以提供所有其他类)将用于创建GraphQLSchema。类路径上名为* .graphqls的任何文件都将用于提供架构定义。有关更多信息,请参见自述文件

我认为我拥有所需的一切,但是导航到localhost:8080/graphql会得到404。 N.B .: localhost:8080/graphiql有效,但是无法加载架构。它说:

{
  "timestamp": "2020-09-15T12:22:21.748+00:00","status": 404,"error": "Not Found","message": "No message available","path": "/graphql"
}

我想念什么?

解决方法

显然,该应用程序找不到任何JpaRepositories,因为SpringBootApplication入门类位于 com.package.some.app 中,而存储库位于 com.package.some.domain中。存储库。组件扫描程序仅扫描带有包 com.package.som.app。 *

的组件。