spring-boot-starter-graphql:/graphql 端点获取 404

问题描述 投票:0回答:3

我在 Spring Boot 应用程序中使用新的 Spring for Graphql。我的问题是,当向

/graphql
端点发出 POST 请求时,服务器总是响应 404。

这些是我的 gradle 依赖项

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-graphql'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
implementation 'org.flywaydb:flyway-core'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'

我按照本教程中的步骤创建控制器(以前称为解析器,实际上我将所有旧的 Graphql 解析器更改为新的 @QueryMapping 和 @MutationMapping 注释)

这是我的 StepController 的代码

@Slf4j @Controller @RequiredArgsConstructor public class StepController { private final StepService stepService; private final TokenService tokenService; @QueryMapping public ArrayList<Step> getSteps(String templateId) { return stepService.getSteps(templateId); } @MutationMapping public Step createStep(StepInput input, DataFetchingEnvironment env) { return stepService.createStep(input, tokenService.getUserId(env)); } }
我还在我的项目中使用 WebSecurity,通过在 SecurityConfig.class 中创建 Bean,将我已弃用的 WebSecurityConfigurerAdapter 更改为

更现代的执行方式 @Configuration public class SecurityConfiguration { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.cors() .configurationSource(request -> { var cors = new CorsConfiguration(); cors.setAllowedOrigins(List.of("http://localhost:4200", "electron://altair")); cors.setAllowedMethods(List.of("GET", "POST", "DELETE", "OPTIONS")); cors.setAllowedHeaders(List.of("*")); cors.setAllowCredentials(true); return cors; }) .and() .csrf().disable() .authorizeRequests() .antMatchers(HttpMethod.POST, "/graphql").permitAll() .antMatchers(HttpMethod.GET, "/stomp/**").permitAll() .anyRequest().authenticated() .and() // this disables session creation on Spring Security .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); return http.build(); } }

我的 GraphQl 架构是在文件夹结构中的 
resources/graphql

中构建的,在切换到新的 Spring Boot Graphql 之前我对此没有任何问题

enter image description here

更新

为了安全起见:我删除了整个文件夹结构,并将其替换为一个仅包含登录突变和从未使用过的查询的schema.graphqls文件,只是为了避免

Query needed
编译器错误
type Mutation {
  login(email: String!, password: String!): Login!
}

type Login {
  token: String
}

// unused, just to make the compiler happy
type Query {
  getLogin: Login
}

应用程序属性

spring.banner.location=classpath:logo.txt spring.main.banner-mode=console spring.output.ansi.enabled=ALWAYS spring.main.allow-bean-definition-overriding=true spring.mail.host=mail.blablabla spring.mail.port=587 spring.mail.username=no-reply@blablabla spring.mail.password=blablalba spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=false spring.profiles.include=prod,dev spring.jpa.database-platform=org.hibernate.dialect.PostgreSQL95Dialect spring.jpa.hibernate.ddl-auto=validate spring.servlet.multipart.max-file-size=512KB

我希望我提供了有关如何设置我的项目的足够信息。我真的很感激任何可以解决这个问题的帮助。我昨天搜索了一整个晚上,终于在这里发布这个问题。我希望有人能帮助我。谢谢

spring-boot graphql
3个回答
0
投票
https://docs.spring.io/spring-graphql/docs/current/reference/html/#execution.graphqlsource.schema-resources

应用程序属性:

spring.graphql.schema.locations=classpath*:graphql/**/

3.1.1。模式资源
GraphQlSource.Builder 可以配置一个或多个要解析和合并在一起的 Resource 实例。这意味着架构文件几乎可以从任何位置加载。

默认情况下,Boot starter 在位置类路径:graphql/**(通常是 src/main/resources/graphql)下查找扩展名为“.graphqls”或“.gqls”的模式文件。您还可以使用文件系统位置或 Spring 资源层次结构支持的任何位置,包括从远程位置、存储或内存加载架构文件的自定义实现。

使用 classpath

:graphql/**/ 跨多个类路径位置查找模式文件,例如跨多个模块。*

https://github.com/graphql-java-kickstart/graphql-spring-boot/discussions/962


0
投票

<dependency> <groupId>com.graphql-java</groupId> <artifactId>graphiql-spring-boot-starter</artifactId> <version>4.3.0</version> </dependency>



-1
投票

spring.graphql.graphiql.enabled=true

© www.soinside.com 2019 - 2024. All rights reserved.