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

Spring Boot 3.3.1使用HttpSyncGraphQlClient发请求报Error 400 [no body]

排查HttpSyncGraphQlClient发送请求时的400 Bad Request问题

针对你遇到的问题,可以从以下几个方向逐一排查:

  • 开启详细日志,对比实际请求内容
    开启Spring GraphQL客户端和RestClient的DEBUG日志,查看实际发送的请求体、请求头,和之前手动构建请求的内容做对比,确认是否存在差异。
    在application.yml中添加日志配置:

    logging:
      level:
        org.springframework.graphql.client: DEBUG
        org.springframework.web.client.RestClient: DEBUG
    

    或者在RestClient构建时添加请求拦截器打印请求细节:

    this.restClient = RestClient.builder()
        .requestInterceptor((request, body, execution) -> {
            System.out.println("Request Headers: " + request.getHeaders());
            if (body != null) {
                System.out.println("Request Body: " + new String((byte[]) body, StandardCharsets.UTF_8));
            }
            return execution.execute(request, body);
        })
        .build();
    
  • 检查retrieveSync的参数是否正确
    retrieveSync方法的参数是要从GraphQL响应data字段中提取的目标字段名,而非文档名。比如你的GraphQL查询如下:

    query myRequest($id: ID!) {
        user(id: $id) {
            name
            email
        }
    }
    

    那么retrieveSync应该传入"user",而不是"myRequest"。参数错误会导致客户端解析响应失败,或触发服务端的结构校验错误。

  • 验证请求头的传递有效性
    虽然你通过RequestContextHolder获取请求头,但要注意:

    • 部分头(如Content-Type、Content-Length)可能被HttpSyncGraphQlClient自动覆盖,需确认服务端接受的Content-Type是否为application/json
    • 确保当前线程存在有效的请求上下文(比如非Web线程调用时RequestContextHolder可能拿不到头)
      对比日志中实际发送的请求头和之前手动请求的头,排查是否有缺失或错误的字段。
  • 检查变量的序列化匹配度
    HttpSyncGraphQlClient默认用Jackson序列化变量,需确认变量的JSON结构和服务端预期一致。可以打印变量的JSON字符串,和手动请求时的变量做对比:

    ObjectMapper mapper = new ObjectMapper();
    System.out.println("Serialized Variables: " + mapper.writeValueAsString(variables));
    

    重点检查日期类型、嵌套对象的序列化格式是否符合服务端要求。

  • 校验GraphQL文档的变量定义
    确认文档中的变量名、类型和你传入的variables完全匹配。比如文档中定义的变量是$userId: ID!,但你传入的变量键是"id",会导致服务端参数校验失败,返回400错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:05:17