Spring GraphQL @Controller中带参数嵌套字段的处理方法
在Spring Boot GraphQL中处理带参数的嵌套字段
你可以通过**@SchemaMapping**注解来处理带参数的嵌套字段,它专门用于映射GraphQL类型中的嵌套字段,配合父对象和参数完成数据查询。以下是具体实现步骤和代码示例:
1. 确保GraphQL Schema定义正确
首先要在你的GraphQL schema文件中,明确嵌套字段及其参数的定义:
type Query { field1(param1: String!): Field1! } type Field1 { field2(param2: String!): Field2! } type Field2 { field3: String! }
2. 在Controller中实现嵌套字段的处理
在已有的Controller中,除了处理顶层field1的方法外,添加针对Field1类型下field2字段的映射方法:
实体类示例
先定义对应的Java实体类(仅保留核心字段):
public class Field1 { private String id; // 用于关联查询的标识字段,根据业务调整 // getter、setter省略 } public class Field2 { private String field3; // getter、setter省略 }
Controller中的处理代码
@Controller public class GraphqlController { // 处理顶层field1查询 @QueryMapping public Field1 field1(@Argument String param1) { // 业务逻辑:根据param1返回Field1实例 Field1 field1 = new Field1(); field1.setId("field1-" + param1); return field1; } // 处理Field1类型下的field2嵌套字段,带param2参数 @SchemaMapping(typeName = "Field1", fieldName = "field2") public Field2 field2(Field1 parentField1, @Argument String param2) { // 业务逻辑:结合父对象Field1的信息和param2,返回Field2实例 Field2 field2 = new Field2(); field2.setField3("field3内容:" + parentField1.getId() + "_" + param2); return field2; } }
关键说明
- @SchemaMapping:通过
typeName指定父GraphQL类型(这里是Field1),fieldName指定要处理的嵌套字段名(这里是field2) - 方法参数中的
parentField1:Spring GraphQL会自动将上层查询得到的Field1实例传入,用于关联查询 - @Argument:用于绑定GraphQL查询中传入的
param2参数
这样当你执行示例中的查询时,框架会先调用field1方法得到Field1对象,再调用field2方法,传入该对象和param2参数,最终返回完整的嵌套数据结构。
内容的提问来源于stack exchange,提问作者Stephan Prat
相关产品推荐
相关产品推荐

