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

Quarkus SmallRye GraphQL类型安全客户端Mutation报未知类型错误

Quarkus类型安全GraphQL客户端调用Linear.app创建Issue报错问题

我正在尝试将Quarkus应用与Linear.app集成,使用类型安全客户端可以正常读取数据,但执行创建Issue的Mutation时遇到了问题。

预期的GraphQL查询格式

正确的查询应该是这样的:

mutation IssueCreate {
  issueCreate(
    input: {
      title: "Issue from Quarkus Test at 1737606760071"
      description: "Something went wrong"
      teamId: "my-linear-team-id"
    }
  ) {
    success
    issue {
      id
      title
    }
  }
}

其中my-linear-team-id为真实的团队ID。

实际请求与报错

日志显示客户端生成的GraphQL请求如下:

{
  "query": "mutation issueCreate($input: CreateIssueInputInput!) { issueCreate(input: $input) {success issue {id title}} }",
  "variables": {
    "input": {
      "title": "Issue from Quarkus Test at 1737606760071",
      "description": "Something went wrong",
      "teamId": "my-linear-team-id"
    }
  },
  "operationName": "issueCreate"
}

得到的错误响应:

{
  "errors": [
    {
      "message": "Unknown type \"CreateIssueInputInput\".",
      "locations": [
        {
          "line": 1,
          "column": 30
        }
      ],
      "extensions": {
        "code": "GRAPHQL_VALIDATION_FAILED",
        "type": "graphql error",
        "userError": true,
        "meta": {}
      }
    }
  ]
}

我的Java代码

CreateIssueInput类

public class CreateIssueInput {
    private String title;
    private String description;
    private String teamId;

    // Getters and setters ...
}

CreateIssueResponse类

public class CreateIssueResponse {
  private boolean success;
  private Issue issue;

  // Getters and setters ...

  public static class Issue {
      private String id;
      private String title;

      // Getters and setters ...
  }
}

LinearClientApi接口

import io.smallrye.graphql.client.typesafe.api.GraphQLClientApi;

@GraphQLClientApi(configKey = "linear-typesafe")
public interface LinearClientApi {
    @Mutation
    CreateIssueResponse issueCreate(@NonNull CreateIssueInput input);
}

调用代码

// Send to Linear:
CreateIssueInput linearIssue = new CreateIssueInput();
linearIssue.setTeamId("my-linear-team-id"); // For the SO example
linearIssue.setTitle("Issue from Quarkus Test at " + System.currentTimeMillis());
linearIssue.setDescription("Something went wrong");

linearClientApi.issueCreate(linearIssue);

尝试的解决方案

编辑1:移除@NonNull注解

修改接口方法为:

@Mutation
CreateIssueResponse issueCreate(CreateIssueInput input);

但仍然报错:"Unknown type \"CreateIssueInputInput\"."

编辑2:重命名输入类

将CreateIssueInput类重命名为CreateIssue,修改后的接口方法:

@Mutation
CreateIssueResponse issueCreate(@NonNull CreateIssue input);

此时生成的请求变为:

{
  "query": "mutation issueCreate($input: CreateIssueInput!) { issueCreate(input: $input) {success issue {id title}} }",
  "variables": {
    "input": {
      "title": "Issue from Quarkus Test at 1737648584761",
      "description": "Something went wrong",
      "teamId": "bf63d22b-d57a-4f57-9161-8de9c2145034"
    }
  },
  "operationName": "issueCreate"
}

对应的错误响应变为:

{
  "errors": [
    {
      "message": "Unknown type \"CreateIssueInput\".",
      "locations": [
        {
          "line": 1,
          "column": 30
        }
      ],
      "extensions": {
        "code": "GRAPHQL_VALIDATION_FAILED",
        "type": "graphql error",
        "userError": true,
        "meta": {}
      }
    }
  ]
}

目前判断问题出在输入类型的映射上,接下来打算用动态客户端构建查询,确认Linear.app期望的正确类型和语法,再和类型安全客户端生成的内容做对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:42:33