Восстановление исходного JSON из SwaggerParseResult ⇐ JAVA
-
Anonymous
Восстановление исходного JSON из SwaggerParseResult
Я обнаружил, что OpenAPIV3Parser предоставляет методы для десериализации документа Open API в формате JSON, но не позволяет сериализовать его обратно. Если, например, мне нужно сделать глубокую копию SwaggerParseResult, я не смогу сериализовать ее обратно в JSON, а затем создать новый SwaggerParseResult путем десериализации этого JSON. На самом деле, я не уверен, каковы официальные рекомендации по восстановлению исходного JSON из SwaggerParseResult (предположим, я не храню его в памяти)
Обратите внимание, что повторно сериализованный JSON должен иметь возможность повторной сериализации обратно в SwaggerParseResult
Есть ли обходные пути?
Вот что я пробовал:
пакет com.example.dynamicgateway.parser; импортировать com.fasterxml.jackson.core.JsonProcessingException; импортировать com.fasterxml.jackson.databind.ObjectMapper; импортировать io.swagger.v3.parser.OpenAPIV3Parser; импортировать io.swagger.v3.parser.core.models.SwaggerParseResult; импортировать org.junit.jupiter.api.Test; общественный класс ParserTest { частный окончательный парсер OpenAPIV3Parser = новый OpenAPIV3Parser(); @Тест void testParser() выдает JsonProcessingException { Строка testDoc = getTestDoc(); SwaggerParseResult parseResult = parser.readContents(testDoc); // Я пробовал с WriteWithDefaultPrettyPrinter() и без него String reserializedDoc = новый ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(parseResult); // не работает, OpenApi имеет значение null SwaggerParseResult redeserializedDoc = parser.readContents(reserializedDoc); } Строка getTestDoc() { возвращаться """ { "опенапи": "3.0.1", "Информация": { "title": "Привет, мир API", "версия": "1.0" }, "серверы": [ { "url": "http://localhost:8090", "description": "Сгенерированный URL-адрес сервера" } ], "пути": { "/радость": { "получать": { "теги": [ «Контроллер сообщений» ], "operationId": "getMessageOfJoy", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/SuccessMessage" } } } } } } }, "/auth/hello-world": { "получать": { "теги": [ «Контроллер сообщений» ], "operationId": "getHelloWorld", "параметры": [ { "имя": "директор", "в": "запрос", «обязательно»: ложь, "схема": { "тип": "строка" } } ], "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/SuccessMessage" } } } } } } }, "/ошибка": { "получать": { "теги": [ "мой-контроллер ошибок" ], "operationId": "ошибка", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "помещать": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_3", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "почта": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_2", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "удалить": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_5", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "параметры": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_6", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "голова": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_1", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "пластырь": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_4", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } } } }, "компоненты": { "схемы": { "Сообщение об успехе": { "тип": "объект", "характеристики": { "сообщение": { "тип": "строка" } } }, "Сообщение о сбое": { "тип": "объект", "характеристики": { "сообщение": { "тип": "строка" }, "метод": { "тип": "строка", "перечисление": [ "ПОЛУЧАТЬ", "ГОЛОВА", "ПОЧТА", "ПОМЕЩАТЬ", "ПЛАСТЫРЬ", "УДАЛИТЬ", "ПАРАМЕТРЫ", "СЛЕД" ] }, "путь_запроса": { "тип": "строка" } } } } } } """; } }
Я обнаружил, что OpenAPIV3Parser предоставляет методы для десериализации документа Open API в формате JSON, но не позволяет сериализовать его обратно. Если, например, мне нужно сделать глубокую копию SwaggerParseResult, я не смогу сериализовать ее обратно в JSON, а затем создать новый SwaggerParseResult путем десериализации этого JSON. На самом деле, я не уверен, каковы официальные рекомендации по восстановлению исходного JSON из SwaggerParseResult (предположим, я не храню его в памяти)
Обратите внимание, что повторно сериализованный JSON должен иметь возможность повторной сериализации обратно в SwaggerParseResult
Есть ли обходные пути?
Вот что я пробовал:
пакет com.example.dynamicgateway.parser; импортировать com.fasterxml.jackson.core.JsonProcessingException; импортировать com.fasterxml.jackson.databind.ObjectMapper; импортировать io.swagger.v3.parser.OpenAPIV3Parser; импортировать io.swagger.v3.parser.core.models.SwaggerParseResult; импортировать org.junit.jupiter.api.Test; общественный класс ParserTest { частный окончательный парсер OpenAPIV3Parser = новый OpenAPIV3Parser(); @Тест void testParser() выдает JsonProcessingException { Строка testDoc = getTestDoc(); SwaggerParseResult parseResult = parser.readContents(testDoc); // Я пробовал с WriteWithDefaultPrettyPrinter() и без него String reserializedDoc = новый ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(parseResult); // не работает, OpenApi имеет значение null SwaggerParseResult redeserializedDoc = parser.readContents(reserializedDoc); } Строка getTestDoc() { возвращаться """ { "опенапи": "3.0.1", "Информация": { "title": "Привет, мир API", "версия": "1.0" }, "серверы": [ { "url": "http://localhost:8090", "description": "Сгенерированный URL-адрес сервера" } ], "пути": { "/радость": { "получать": { "теги": [ «Контроллер сообщений» ], "operationId": "getMessageOfJoy", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/SuccessMessage" } } } } } } }, "/auth/hello-world": { "получать": { "теги": [ «Контроллер сообщений» ], "operationId": "getHelloWorld", "параметры": [ { "имя": "директор", "в": "запрос", «обязательно»: ложь, "схема": { "тип": "строка" } } ], "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/SuccessMessage" } } } } } } }, "/ошибка": { "получать": { "теги": [ "мой-контроллер ошибок" ], "operationId": "ошибка", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "помещать": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_3", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "почта": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_2", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "удалить": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_5", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "параметры": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_6", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "голова": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_1", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } }, "пластырь": { "теги": [ "мой-контроллер ошибок" ], "operationId": "error_4", "ответы": { "200": { "описание": "ОК", "содержание": { "*/*": { "схема": { "$ref": "#/компоненты/схемы/FailureMessage" } } } } } } } }, "компоненты": { "схемы": { "Сообщение об успехе": { "тип": "объект", "характеристики": { "сообщение": { "тип": "строка" } } }, "Сообщение о сбое": { "тип": "объект", "характеристики": { "сообщение": { "тип": "строка" }, "метод": { "тип": "строка", "перечисление": [ "ПОЛУЧАТЬ", "ГОЛОВА", "ПОЧТА", "ПОМЕЩАТЬ", "ПЛАСТЫРЬ", "УДАЛИТЬ", "ПАРАМЕТРЫ", "СЛЕД" ] }, "путь_запроса": { "тип": "строка" } } } } } } """; } }
Мобильная версия