在上一篇文章中我们介绍了Graphql集成SpringMVC,今天就来介绍下GraphQLResolver的使用。
假设我们想要Book这个API返回desc这个字段,desc可能并不在数据库中,或者是你想个性化定制你的返回数据,这个时候就轮到GraphQLResolver了。
GraphQLResolver的使用
- 首先将schema.graphqls中关于book的声明变更如下:
1 2 3 4 5 6 7
| type Book { id: Long name: String url: String person: Person desc: String }
|
但是Book类的声明仍然没有任何变化
1 2 3 4 5 6 7 8 9 10 11
| @Data @AllArgsConstructor @NoArgsConstructor @Builder public class Book { private Long id; private String name; private String url; private Person person; }
|
但是我们的声明中是添加了desc这个字段的,那么我们怎么处理这个字段呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import com.coxautodev.graphql.tools.GraphQLResolver; import com.generalthink.graphql.com.generalthink.graphql.bean.Book; import org.springframework.stereotype.Component;
@Component public class BookResolver implements GraphQLResolver<Book> { public String getDesc(Book book) { if("Java".equals(book.getName())) { return "great book"; } else { return "unrecommened book"; } }
}
|
- 在GraphqlEndopoint中声明需要处理的resolver:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @Component public class GraphqlEndpoint extends SimpleGraphQLServlet {
@Autowired public GraphqlEndpoint(Query query, Mutation mutation, BookResolver bookResolver) { super(SchemaParser.newParser() .file("schema.graphqls") .resolvers(query,mutation,bookResolver) .scalars(Scalars.JAVA_LONG) .build() .makeExecutableSchema()); } }
|
此时使用grapqhql playgound发起请求:
Graphql Playground的使用
playground工具还有一个chome插件版,可以在应用商店搜索graphiql安装,同样可以提供一样的功能,上面看了知道如何发起请求,但是在我们前端中如何发起请求呢?
首先打开chrome调试工具
发起graphql请求,可以在dev tools中看到具体的请求,此时可以将请求复制为cURL或者查看具体的发起的请求体
这里我们把具体请求导出为cURL,然后导入到postman中
查看请求结果
会发现在web请求中,是将请求参数全部放到body体中发送到后端的。在这次使用过程中,发现graphql所有返回的参数都是可以由前端自己定制的,而且使用graphql playground的过程可以让我们知道请求需要哪些参数,返回可以由哪些值,使用还是极为方便的。