Предварительная обработка строки запроса GraphQL в Java - PullRequest
0 голосов
/ 14 октября 2019

У меня есть Java-программа, которая, помимо прочего, читает необработанные запросы GraphQL из XML-файлов и отправляет их в заданную конечную точку через HTTP. Проблема в том, что сервер принимает только правильно отформатированные запросы GraphQL, что означает, что лишние пробелы, переводы строки и т. Д. Не допускаются. Поэтому в основном я должен записать их в одну строку, потому что любой символ новой строки будет разбивать весь запрос, добавляя много пробелов для соответствия иерархии XML (элемент, содержащий запрос, не является корневым элементом).

Как вы можете сказать, однострочные запросы, особенно длинные, не дружественны для человека и их трудно читать. Здесь и там есть множество средств форматирования / настройки кода, в сети, в 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»?

1 Ответ

0 голосов
/ 16 октября 2019

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
...