Graphql 没有为接口/联合定义解析器 - java

2024-04-21

我在使用这种方法添加解析器时遇到问题graphql:

@RestController
@RequestMapping("/api/dictionary/")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class DictionaryController {
    @Value("classpath:items.graphqls")
    private Resource schemaResource;
    private GraphQL graphQL;
    private final DictionaryService dictionaryService;

    @PostConstruct
    public void loadSchema() throws IOException {
        File schemaFile = schemaResource.getFile();
        TypeDefinitionRegistry registry = new SchemaParser().parse(schemaFile);
        RuntimeWiring wiring = buildWiring();
        GraphQLSchema schema = new SchemaGenerator().makeExecutableSchema(registry, wiring);
        graphQL = GraphQL.newGraphQL(schema).build();
    }

private RuntimeWiring buildWiring() {
    DataFetcher<List<DictionaryItemWithParentDto>> fetcher6 = dataFetchingEnvironment -> dictionaryService.getClaimSubType();

        return RuntimeWiring.newRuntimeWiring()
                .type("Query", typeWriting ->
                   typeWriting
                    .dataFetcher("getClaimSubType", fetcher6)
                    )
                .build();
    }


public List<DictionaryItemWithParentDto> getClaimSubType() {
    return dictionaryService.getClaimSubType();
   }
  }

items.graphqls文件内容:

type Query {
    getClaimSubType: [DictionaryItemWithParentDto]
}

type DictionaryItemWithParentDto {
    code: String!
    name: String
    parents: [DictionaryItemDto]
}

type DictionaryItemDto {
    code: String!
    name: String
    description: String
}

在java中我有Vehicle接口和两个实现它的类:Airplane and Car。当我将这一行添加到架构中时:

union SearchResult = Airplane | Car

我收到以下错误:

There is no type resolver defined for interface / union 'Vehicle' type, There is no type resolver defined for interface / union 'SearchResult' type]}

我不知道如何处理。

如果我添加:

interface Vehicle {
    maxSpeed: Int
}

type Airplane implements Vehicle {
    maxSpeed: Int
    wingspan: Int
}

type Car implements Vehicle {
    maxSpeed: Int
    licensePlate: String
}

我收到以下错误:

errors=[There is no type resolver defined for interface / union 'Vehicle' type]

我如何使用我的方法处理这些错误?还有另一种方法可以处理吗?

Edit

添加这些代码行可以部分解决问题,我猜:

TypeResolver t =  new TypeResolver() {
    @Override
    public GraphQLObjectType getType(TypeResolutionEnvironment env) {
        Object javaObject = env.getObject();
        if (javaObject instanceof Car) {
            return env.getSchema().getObjectType("Car");
        } else if (javaObject instanceof Airplane) {
            return env.getSchema().getObjectType("Airplane");
        } else {
            return env.getSchema().getObjectType("Car");
        }
    }
};

并添加到RuntimeWiring建设者这个:

            .type("Vehicle", typeWriting ->
                    typeWriting
                            .typeResolver(t)
            )


    @PostMapping("getVehicle")
    public ResponseEntity<Object> getVehicleMaxSpeed(@RequestBody String query) 
   {
        ExecutionResult result = graphQL.execute(query);
        return new ResponseEntity<Object>(result, HttpStatus.OK);
    }

当询问时:

query {
    getVehicle(maxSpeed: 30) {
        maxSpeed

    }
}

我得到了maxSpeed但是当我添加wingspan我收到一个错误

Field 'wingspan' in type 'Vehicle' is undefined @ 'getVehicle/wingspan'",

I added

getVehicle(maxSpeed: Int): Vehicle

To the graphqls文件。我认为多态性在这里会起作用。


添加这些代码行可以解决问题:

TypeResolver t =  new TypeResolver() {
    @Override
    public GraphQLObjectType getType(TypeResolutionEnvironment env) {
        Object javaObject = env.getObject();
        if (javaObject instanceof Car) {
            return env.getSchema().getObjectType("Car");
        } else if (javaObject instanceof Airplane) {
            return env.getSchema().getObjectType("Airplane");
        } else {
            return env.getSchema().getObjectType("Car");
        }
    }
};

并添加到RuntimeWiring建设者这个:

            .type("Vehicle", typeWriting ->
                    typeWriting
                            .typeResolver(t)
            )


    @PostMapping("getVehicle")
    public ResponseEntity<Object> getVehicleMaxSpeed(@RequestBody String query) 
   {
        ExecutionResult result = graphQL.execute(query);
        return new ResponseEntity<Object>(result, HttpStatus.OK);
    }

当询问时:

query {
    getVehicle(maxSpeed: 30) {
        maxSpeed

    }
}

我得到了maxSpeed但是当我添加wingspan我收到一个错误

Field 'wingspan' in type 'Vehicle' is undefined @ 'getVehicle/wingspan'",

I added

getVehicle(maxSpeed: Int): Vehicle

To the graphqls文件。我认为多态性在这里会起作用。

如果我想要子类中的字段,我可以这样要求它们:

query {
    getVehicle(maxSpeed: 10) {
        maxSpeed
        ... on Airplane {
        wingspan
      }
        ... on Car {
        licensePlate
      }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Graphql 没有为接口/联合定义解析器 - java 的相关文章

随机推荐

  • /var/tmp/rpm-tmp.b1DgAt (%build) 的退出状态错误

    我正在尝试编译 Tizen 源代码 编译工具使用rpm构建环境 在编译特定包时 我遇到 rpm 构建问题 var tmp rpm tmp b1DgAt build 的退出状态错误 这是我的构建日志 Building CXX object C
  • 如何将 Pinterest 集成到 ios 应用程序中

    我想整合兴趣在我的应用程序中 我想在我的应用程序中添加 pinterest 按钮 通过它我可以在我提到的 pinterest 上上传图像他们的开发者网站 http developers pinterest com 但这对我没有帮助 我包含了
  • foo() 缺少 1 个必需的位置参数

    class test def foo self pic path enc path key path return pic path enc path key path if name main s test pic path pic pn
  • 边框颜色的CSS复选框样式[重复]

    这个问题在这里已经有答案了 我的表格中有一个复选框 这是该复选框的 CSS input type checkbox width 20px height 30px margin auto display table row border 5p
  • Bootstrap 按钮活动颜色变化

    我正在使用引导按钮类 更具体地说 如下
  • 如何从WebBrowser控件获取图像

    我有一个 WebBrowser 控件 在浏览页面后我需要下载图像 我使用了以下代码 HtmlElementCollection tagsColl webBrowser1 Document GetElementsByTagName img f
  • SQL插入相关表

    在我看来 这似乎是 SQL 数据库开发中经常出现的问题 但我对这一切都是新手 所以请原谅我的无知 我有 2 张桌子 CREATE TABLE dbo Tracks TrackStringId bigint NOT NULL Id bigin
  • 如何从 Node.js 调用 C++ 代码?

    我目前正在开发一个在服务器上运行的模拟器 并应在浏览器中显示数据 对于服务文件 通信和类似的事情 我想使用 Node js 但是 我不确定它在计算部门是否会像我希望的那样执行 所以我想用 C 开发模拟部分 模拟被划分为单独的 世界 它们都以
  • 使用 node-sass 安装 angular-cli 时出错

    我的系统配置 Debian 4 4 nvm 0 33 8 节点 v8 9 4 npm 5 6 0 我想安装 Angular clinpm install g angular cli 但我收到一条错误消息 root contracts hom
  • NugGet Semver - 允许哪些预发行角色?

    我正在尝试对我的 NuGet 包 NET Core 2 之一使用语义版本控制 版本如下 1 0 0 my fancy branch 123 正如您所猜测的 我尝试将分支名称和当前 BuildId 设置为预发布标签 不幸的是 dotnet b
  • MediaCodec.createInputSurface() 在 Android 模拟器中抛出 IllegalStateException(错误 -38)

    I have MediaMuxer MediaMuxer mMediaMuxer new MediaMuxer new File Environment getExternalStorageDirectory video mp4 getPa
  • 在 Shiny 中格式化响应式 data.frames

    我有一个工作闪亮的应用程序 但我正在更改它 以便输入数据是反应性的 当底层数据更新时它会更新 当它刚刚读入数据时 它工作得很好 但现在数据是反应性的 我在其中一个文件上遇到了问题 另外两个文件按预期工作 该文件是从数据库导出的 csv 我想
  • 数据库级别的国际化

    谁能向我指出一些解决数据库级别任务国际化的模式 最简单的方法是为每个文本列的每种语言添加一个文本列 但这在某种程度上有点难闻 我真的希望能够动态添加支持的语言 我要提出的解决方案是保存在模型中的一种主要语言和一个查询翻译并将翻译保存到的字典
  • 为什么unique_ptr::~unique_ptr需要T的定义?

    如果我有一堂 酒吧 课 bar h class Bar public Bar 我转发声明与另一个类 Foo 中的 std unique ptr 一起使用 foo h include
  • Visual Studio 2010 - 如何优化

    我正在使用 2010 版的 Visual Studio 但遇到了许多延迟问题 我的计算机具有良好的 RAM 和处理器配置 特别是在保存文件时 目前 我正在进行一个中型项目 只有一个打开文件 ASP NET 页面 使用第三方 Telerik
  • ActionBarSherlock - 无法解析类型 android.support.v4.app.Fragment。它是从所需的 .class 文件间接引用的

    我使用 ActionBarSherlock 作为一个项目中的库项目 该项目本身就是一个库 一切都工作正常 直到我将项目移至新计算机并更新了 SDK 工具 我有这个错误我不明白 当我创建一个扩展 SherlockFragment 的类时 如下
  • xCode Instruments 检测到的这些内存泄漏对象是什么?

    我有一个 iPhone 应用程序 似乎存在内存泄漏问题 这是一款益智游戏 在玩了几个谜题后 应用程序在设备上崩溃了 我现在尝试使用 xcode Instruments 来检测发生了什么 第一次使用仪器 我注意到 泄漏 图中有一个泄漏栏 就在
  • JTextField 中的下拉列表

    我不知道当我在文本字段中输入一些字母时 应该从我的数据库中选取相关项目并应显示为下拉列表 例如 我在文本字段中输入了 J 在我的数据库中具有诸如 Juby Jaz Jasmine Joggy 之类的名称 这些名称应显示为列表 这样我就可以从
  • MSChart 中系列和数据点的所有可用自定义属性的最终列表

    我正在使用 NET 3 5 MSChart 控件 有时我发现我需要向系列或数据点添加自定义属性 例如 Series series new Series series PieDrawingStyle SoftEdge DataPoint po
  • Graphql 没有为接口/联合定义解析器 - java

    我在使用这种方法添加解析器时遇到问题graphql RestController RequestMapping api dictionary RequiredArgsConstructor onConstructor Autowired p