You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中GraphQL请求被识别为静态资源报404问题求助

排查思路:GraphQL请求被当作静态资源返回404

针对你遇到的REST接口正常、GraphQL请求被静态资源处理器处理返回404的问题,按以下步骤排查:

1. 先确认服务本身的GraphQL端点是否正常

跳过Kubernetes Ingress,直接在Pod内部测试服务的GraphQL端点:

curl -X POST http://localhost:8080/graphql -H "Content-Type: application/json" -d '{"query":"{ __typename }"}'

如果返回正常的GraphQL响应,说明问题出在Ingress路由配置;如果仍然返回404,说明服务内部的GraphQL配置存在问题。

2. 验证GraphQL自动配置是否生效

  • 检查依赖:确保项目中已引入spring-boot-starter-graphql依赖(Maven/Gradle),没有该依赖的话,Spring Boot不会自动注册GraphQL控制器,请求会落到静态资源处理器。
  • 查看启动日志:启动应用时,搜索是否有类似以下日志:

    GraphQL endpoint configured at '/graphql'
    Loaded GraphQL schema from locations [classpath*:graphql/**/]
    若没有这类日志,说明GraphQL自动配置未生效,可能是依赖缺失或配置被覆盖。

  • 通过Actuator查看请求映射:启用mappings端点(修改management.endpoints.web.exposure.include添加mappings),访问http://localhost:9090/actuator/mappings,搜索/graphql,确认是否存在GraphQlHttpController对应的映射。如果没有,说明GraphQL控制器未注册。

3. 排查Ingress路由的路径匹配与重写

错误提示中的路径是my-service/graphql,说明Ingress可能将请求转发到了服务的/my-service/graphql路径,而你的服务配置中GraphQL路径是/graphql,导致路径不匹配:

  • 若使用Nginx Ingress,需配置路径重写注解,将前缀/my-service去掉:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$2
    spec:
      rules:
      - http:
          paths:
          - path: /my-service(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 8080
    
    该配置会将/my-service/graphql重写为/graphql,匹配服务的GraphQL端点。
  • 确认Ingress的路径规则是否与服务的实际路径对齐:如果服务设置了server.servlet.context-path=/my-service,则GraphQL端点路径为/my-service/graphql,Ingress需直接转发到该路径,无需重写。

4. 检查Spring MVC的请求处理优先级与规则

静态资源处理器的优先级高于@RequestMapping控制器,当请求路径未匹配到任何控制器映射时,才会被静态资源处理器接管:

  • 检查是否有自定义WebMvcConfigurer或RequestMappingHandlerMapping修改了路径匹配规则(如全局路径前缀、路径忽略),导致/graphql未被映射到GraphQL控制器。
  • 若存在自定义路径配置,需确保/graphql路径被排除在规则之外,或明确包含该路径的映射。

5. 排查拦截器/过滤器的影响

自定义的拦截器、过滤器可能会修改请求路径或拦截请求,导致请求无法到达GraphQL控制器:

  • 临时禁用所有自定义拦截器、过滤器,测试GraphQL请求是否恢复正常。
  • 若禁用后正常,逐一排查每个拦截器/过滤器,确认是否对/graphql路径做了错误处理。

内容的提问来源于stack exchange,提问作者Priya Mounica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:12:57