我有一个Java程序,除其他事项外,该程序从XML文件读取原始GraphQL查询,并将其通过HTTP发送到给定的端点。问题在于服务器仅接受格式正确的GraphQL查询,这意味着不允许有多余的空格,换行符等。因此,基本上我必须将它们写在一行中,因为任何换行符都会通过添加大量空格来匹配XML层次结构(包含查询的元素不是根元素)来破坏整个查询。
如您所知,单行查询(特别是长查询)不是人类友好的并且很难阅读。在线,IDEA,邮递员,失眠症等在线中有很多代码格式化程序/修饰符,所有这些都可以通过单击一个按钮来完成。
有效的XML文件(单行查询):
<request>
<url>http://localhost:8080/graphql</url>
<type>GRAPHQL</type>
<body>mutation { login(input: {username: \"user\", password: \"12345\"}) {status}}</body>
</request>
所需的XML文件(多行查询):
<request>
<url>http://localhost:8080/graphql</url>
<type>GRAPHQL</type>
<body>
mutation {
login(input: {username: "user", password: "12345"}) {
status
}
}
</body>
</request>
我该如何处理这种情况?发送之前,我应该对'body'字符串进行格式化。是否有任何“整理”库,还是我应该编写自定义符号“删除”?
答案 0 :(得分:0)
graphql-java已经附带AstPrinter
,可以漂亮地打印GraphQL AST节点。因此,您可以先将查询字符串转换为AST节点,然后使用它来美化查询字符串:
String gql = "mutation { login(input: {username: \"user\", password: \"12345\"}) {status}}";
Parser parser = new Parser();
Document doc = parser.parseDocument(gql);
System.out.println(AstPrinter.printAst(doc)); //which should print out a prettified query here