在 Java 中美化 GraphQL 查询字符串
Prettify GraphQL query string in Java
我有一个 Java 程序,除其他外,它从 XML 文件中读取原始 GraphQL 查询,并通过 HTTP 将它们发送到给定端点。问题是服务器只接受格式正确的 GraphQL 查询,这意味着不允许额外的空格、换行符等。所以基本上我必须将它们写在一行中,因为任何换行符都会通过添加大量空格来匹配 XML 层次结构(包含查询的元素不是根元素)来破坏整个查询。
如您所知,单行查询,尤其是长查询,对人不友好且难以阅读。到处都有很多代码 formatters/prettifyers,在线的,IDEA 内部的,Postman,Insomnia 等,所有这些都可以通过单击按钮来完成。
工作 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' 字符串进行格式化。有没有 'prettification' 库,或者我应该写自定义符号 'remover'?
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
我有一个 Java 程序,除其他外,它从 XML 文件中读取原始 GraphQL 查询,并通过 HTTP 将它们发送到给定端点。问题是服务器只接受格式正确的 GraphQL 查询,这意味着不允许额外的空格、换行符等。所以基本上我必须将它们写在一行中,因为任何换行符都会通过添加大量空格来匹配 XML 层次结构(包含查询的元素不是根元素)来破坏整个查询。
如您所知,单行查询,尤其是长查询,对人不友好且难以阅读。到处都有很多代码 formatters/prettifyers,在线的,IDEA 内部的,Postman,Insomnia 等,所有这些都可以通过单击按钮来完成。
工作 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' 字符串进行格式化。有没有 'prettification' 库,或者我应该写自定义符号 'remover'?
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