如何在DGS的DataFetcher中获取GraphiQL格式的GraphQL查询语句
在DGS DataFetcher中获取格式化的GraphQL查询语句
要在你的@DgsQuery方法里拿到和GraphiQL发送格式一致的查询语句,需要两步:获取原始查询字符串,再用GraphQL的工具类将其格式化为带缩进和换行的结构。
实现步骤与代码示例
修改你的DataFetcher方法,引入GraphQL的Parser和Printer类来处理查询格式化:
import graphql.Printer; import graphql.language.Document; import graphql.parser.Parser; import org.springframework.util.StringUtils; @DgsQuery public Project project(DgsDataFetchingEnvironment dfe, @NotNull @InputArgument String projectId) { // 获取客户端发送的原始查询字符串 String rawQuery = dfe.getQuery(); String formattedQuery = rawQuery; if (StringUtils.hasText(rawQuery)) { try { // 将原始查询解析为GraphQL语法树 Document queryDocument = new Parser().parse(rawQuery); // 格式化语法树,生成与GraphiQL一致的带缩进换行的查询语句 formattedQuery = new Printer().print(queryDocument); } catch (Exception e) { // 解析失败时保留原始字符串,避免影响主逻辑 e.printStackTrace(); } } // 这里可以根据需求使用格式化后的查询,比如打印、日志记录等 System.out.println("格式化后的查询:\n" + formattedQuery); return projectService.findById(projectId); }
说明
dfe.getQuery()会返回客户端发送的原始查询内容,可能是压缩后的单行字符串;Parser负责将字符串解析为GraphQL的语法树对象Document,Printer则将语法树重新输出为格式化的、可读性强的字符串,和你在GraphiQL里编写的格式完全一致;- 增加异常处理是为了避免查询解析失败时影响项目数据的正常查询逻辑。
内容的提问来源于stack exchange,提问作者Zakhar
相关产品推荐
相关产品推荐

