#java #spring #spring-boot #swagger #swagger-ui
Вопрос:
https://localhost:9444/swagger-ui 404 ошибка
https://localhost:9444/swagger-resources и https://localhost:9444/v2/api-docs работает без проблем, поэтому я знаю, что он распознает чванство, но при попытке запустить он возвращает ошибку 404 https://localhost:9444/swagger-ui
Вот код из my pom.xml
lt;dependencygt; lt;groupIdgt;io.springfoxlt;/groupIdgt; lt;artifactIdgt;springfox-swagger-uilt;/artifactIdgt; lt;versiongt;2.9.2lt;/versiongt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;io.springfoxlt;/groupIdgt; lt;artifactIdgt;springfox-swagger2lt;/artifactIdgt; lt;versiongt;2.9.2lt;/versiongt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;io.springfoxlt;/groupIdgt; lt;artifactIdgt;springfox-schemalt;/artifactIdgt; lt;versiongt;2.9.2lt;/versiongt; lt;/dependencygt;
А вот код из my IDAAApiApplication.java
файла
package com.ibm.idaa.adminfoundation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.socket.config.annotation.EnableWebSocket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @SpringBootApplication @EnableSwagger2 @EnableAutoConfiguration(exclude={MongoAutoConfiguration.class}) @EnableAsync @EnableScheduling @EnableWebSocket @Slf4j public class IDAAApiApplication extends SpringBootServletInitializer { @Autowired private Environment env; // @Value("${encryption.mode}") private String encryptionMode="base64"; public static void main(String[] args) { new SpringApplicationBuilder(IDAAApiApplication.class) .sources(IDAAApiApplication.class) .run(args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(IDAAApiApplication.class); }
И вот my swaggerConfig.java
package com.ibm.idaa.adminfoundation.configuration; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfig { // @Value("${spring.profiles.active}") private String evn="dev"; @Bean public Docket buildDocket() { //not display swagger api doc in prod env if ("prod".equals(evn)) { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(displayBlank()) .select() .paths(PathSelectors.none()) .build(); } return new Docket(DocumentationType.SWAGGER_2) .apiInfo(buildApiInfo()) .select() //packages you want to be scanned by swagger .apis(RequestHandlerSelectors.basePackage("com.ibm.idaa.adminfoundation.rest.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo buildApiInfo() { return new ApiInfoBuilder() .title("Acceleration API's for IDAA Services") .contact(new Contact("Tyler Condon", "", "")) .version("1.0") .build(); } /** * display blank page * * @return */ private ApiInfo displayBlank() { return new ApiInfoBuilder() .title("") .description("") .license("") .licenseUrl("") .termsOfServiceUrl("") .version("") .contact(new Contact("", "", "")) .build(); } }
Вот вывод, который я получаю в своей консоли, когда пытаюсь запустить :
21/11/02 09:46:35 INFO [Default Executor-thread-186] org.springframework.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 21/11/02 09:46:35 DEBUG [Default Executor-thread-186] org.springframework.web.servlet.DispatcherServlet : Detected StandardServletMultipartResolver 21/11/02 09:46:35 DEBUG [Default Executor-thread-186] org.springframework.web.servlet.DispatcherServlet : enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data 21/11/02 09:46:35 INFO [Default Executor-thread-186] org.springframework.web.servlet.DispatcherServlet : Completed initialization in 27 ms 21/11/02 09:46:35 DEBUG [Default Executor-thread-186] org.springframework.web.servlet.DispatcherServlet : GET "/swagger-ui/", parameters={} 21/11/02 09:46:35 WARN [Default Executor-thread-186] org.springframework.web.servlet.PageNotFound : No mapping for GET /swagger-ui/ 21/11/02 09:46:35 DEBUG [Default Executor-thread-186] org.springframework.web.servlet.DispatcherServlet : Completed 404 NOT_FOUND 21/11/02 09:46:35 ERROR [Default Executor-thread-186] org.springframework.boot.web.servlet.support.ErrorPageFilter : Cannot forward to error page for request [/swagger-ui/] as the response has already been committed. As a result, the response may have the wrong status code. If your application is running on WebSphere Application Server you may be able to resolve this problem by setting com.ibm.ws.webcontainer.invokeFlushAfterService to false
Примечание : я пробовал с завершающей косой чертой и без нее и получил тот же результат.
Кто-то предложил мне использовать yaml. Ни один из онлайн-гидов об этом не упоминал?
Комментарии:
1. С этим:
swagger-ui/index.html
работает ?2. Я тоже пытался это сделать, но безуспешно
3. Я вижу, что вы используете схему https для локального хоста, попробуйте перейти на http, И если вы используете swagger 3.0, URL-адрес должен заканчиваться
http://localhost:9444/swagger-ui/
косой чертой «/»4. Я попробовал это с помощью косой черты и все равно получаю тот же результат. Есть ли причина, по которой https не работает для swagger?
5. Кроме того, я пытаюсь запустить это на сервере Liberty, я не знаю, имеет ли это какое-либо значение?