#java #jersey #swagger #jax-rs #swagger-ui
#java #джерси #swagger #jax-rs #swagger-ui
Вопрос:
Мне нужно использовать openapi 3 с swagger ui для документирования службы jaxrs jersey, используя swagger-core v3. Я предпочитаю использовать полный кодовый подход без использования файлов конфигурации. Я собираюсь использовать Wildfly для развертывания службы.
Вот код для генерации openapi.json по следующему адресу: http://localhost:12079/suma-auth-ms/rest/openapi.json
@ApplicationPath("/rest")
public class AuthRestConfig extends Application {
public AuthRestConfig(@Context ServletConfig servletConfig) {
super();
System.out.println();
OpenAPI oas = new OpenAPI();
Info info = new Info()
.title("Suma Automaton OpenAPI")
.description("This is a sample server Petstore server. You can find out more about Swagger "
"at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, "
"you can use the api key `special-key` to test the authorization filters.")
.termsOfService("http://swagger.io/terms/")
.contact(new Contact()
.email("emasil@email.com"));
oas.info(info);
SwaggerConfiguration oasConfig = new SwaggerConfiguration()
.openAPI(oas)
.prettyPrint(true)
.resourcePackages(Stream.of("io.swagger.sample.resource").collect(Collectors.toSet()));
try {
new JaxrsOpenApiContextBuilder<>()
.servletConfig(servletConfig)
.application(this)
.openApiConfiguration(oasConfig)
.buildContext(true);
} catch (OpenApiConfigurationException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
}
и здесь вы можете увидеть файл openapi.json по указанному адресу:
{
"openapi": "3.0.1",
"paths": {
"/rest/authentication/authenticateUser": {
"post": {
"operationId": "authenticateUser",
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Credentials"
}
}
}
},
"responses": {
"default": {
"description": "default response",
"content": {
"application/json": {}
}
}
}
}
}
},
"components": {
"schemas": {
"Credentials": {
"type": "object",
"properties": {
"username": {
"type": "string"
},
"password": {
"type": "string"
}
}
}
}
}
}
Как вы можете видеть в этом файле, нет ссылок на suma-auth-ms, служба правильно отвечает на http://localhost:12079/suma-auth-ms/rest/authentication/authenticateUser
Когда я собираюсь взглянуть на пользовательский интерфейс swagger и попытаться выполнить некоторые тесты, я получаю такой результат:
Показанная ошибка связана с отсутствием suma-auth-ms в адресе, используемом curl для вызова службы. Адрес должен быть http://localhost:12079/suma-auth-ms/rest/authentication/authenticateUser и не http://localhost:12079/rest/authentication/authenticateUser
Есть ли способ исправить?
Ответ №1:
Вам нужно использовать io.swagger.v3.oas.models.servers.Сервер и добавьте его в свой объект oas.
oas.info(info);
String url = "/suma-auth-ms/"
List<Server> servers = new ArrayList<Server>();
Server server = new Server();
server.setUrl(url);
servers.add(server);
oas.setServers(servers)
После внесения этого изменения вы должны увидеть серверы, перечисленные в вашем openapi.json, и вы сможете выполнить запрос с добавлением suma-auth-ms
Комментарии:
1. Спасибо за ответ. swagger-core, похоже, игнорирует мои конфигурации. Использование конфигурации previus, добавление вашей конфигурации или использование пустого приложения:
@ApplicationPath("/rest") public class AuthRestConfig extends Application { public AuthRestConfig() { } }
дайте мне тот же результат. Есть идеи?2. Возможно, есть одно отличие, которое вы можете try…..In в моем случае я использовал пользовательский класс сервлета для настройки Swagger и создал отдельный класс для конфигурации JAX-RS, который работает нормально.
3. Привет, ты нашел решение для этого?