Я переношу свой проект, основанный на springMVC, на весеннюю загрузку. это многомодульный проект. Мне не удается загрузить файл swagger-ui.html. Я добавил диспетчерский сервлет следующим образом:
@Configuration
public class DispatcherServletConfig {
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
@Bean
public ServletRegistrationBean dispatcherServletRegistration() {
ServletRegistrationBean registration = new
ServletRegistrationBean(dispatcherServlet(), "/prefix1/*");
registration.addUrlMappings("/admin/*");
registration.addUrlMappings("/prefix2/*");
registration.setName(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME);
return registration;
}
}
private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES =
new HashSet<String>(Arrays.asList("application/json",
"application/xml"));
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {
private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES =
new HashSet<String>(Arrays.asList("application/json",
"application/xml"));
@Bean
public Docket api() {
ParameterBuilder aParameterBuilder = new ParameterBuilder();
aParameterBuilder.name("Authorization").modelRef(new ModelRef("string")).parameterType("header")
.description("Authorization Header").required(true).build();
List<Parameter> aParameters = new ArrayList<>();
aParameters.add((Parameter) aParameterBuilder.build());
return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any()).build().apiInfo(apiInfo()).globalOperationParameters(aParameters).produces(DEFAULT_PRODUCES_AND_CONSUMES);
}
private ApiInfo apiInfo() {
Contact contact = new Contact("Power2SME Pvt. Ltd.", "http://www.power2sme.com", "[email protected]");
return new ApiInfo("NBFC API", "Information related to api exposed by NBFC system.", "1.0",
"https://www.power2sme.com/termsandconditions", contact, "License of API",
"https://www.power2sme.com/privacypolicy", new ArrayList<>());
}
}
Я добавил в свой pom.xml следующие зависимости:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-excelant</artifactId>
<version>3.14</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.2.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.4</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.0.6</version>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.2-FINAL</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scribe</groupId>
<artifactId>scribe</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>3.10.0</version>
</dependency>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-jackson</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
а также плагин:
<plugin>
<groupId>io.github.robwin</groupId>
<artifactId>swagger2markup-maven-plugin</artifactId>
<version>0.9.3</version>
<configuration>
<inputDirectory>${project.basedir}/apiDoc/json</inputDirectory>
<swaggerFile>swagger.json</swaggerFile>
<outputDirectory>${project.basedir}/apiDoc/asciidoc</outputDirectory>
<markupLanguage>asciidoc</markupLanguage>
</configuration>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>process-swagger</goal>
</goals>
</execution>
</executions>
</plugin>
Я сохранил apiDocs в папке моего проекта.
Я получаю сообщение об ошибке 404 всякий раз, когда вызываю свой {project_name} /prefix2/swagger-ui.html#
и всякий раз, когда я вызываю {project_name} /swagger-ui.html# url, я получаю это

Кроме того, swagger-ui.html не загружается в API.

Как я могу решить эту проблему? Спасибо,




В проекте весенней загрузки вам нужно сделать:
Конфигурация Swagger в основном сосредоточена вокруг bean-компонента Docket.
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("org.example.sp.controller"))
.paths(PathSelectors.ant("/foos/*"))
.build();
}
Swagger 2 включен через аннотацию @EnableSwagger2.
Чтобы убедиться, что Springfox работает, вы можете посетить следующий URL-адрес в своем браузере:
http://servert:port /project-name/api/v2/api-docs
Результатом является ответ JSON с большим количеством пар ключ-значение, который не очень удобочитаем. К счастью, Swagger предоставляет для этой цели пользовательский интерфейс Swagger.
И чтобы проверить свой swagger-ui, вы можете сделать это по URL: http://server:8080/toto/swagger-ui.html
И с этим aproche мы должны аннотировать наши конечные точки некоторыми чванливыми аннотациями: Есть простой документ здесь
Или вы можете следовать примеру здесь
У меня уже есть этот боб. Тем не менее, это не работает. что я думаю, это проблема github.com/springfox/springfox/issues/2037, но предоставленные решения не сработали. @TinyOS
Я нигде не видел @ EnableSwagger2! Не могли бы вы удалить все, что у вас есть о чванстве, в своем проекте (кроме зависимостей) и попытаться создать класс SwaggerConfig, в который вы поместите то, что я вам дал, а затем попробуйте еще раз и скажите мне, что вы получите?
Я добавил аннотацию EnableSwagger2, а компонент Docket был добавлен в сам SwaggerConfig. я отредактировал свой пост. Думаю, есть проблема с зависимостями. Я также опубликую свои зависимости. @TinyOS
Попробуйте добавить следующий код в свой файл конфигурации swagger:
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}*
Я считаю, что возникла проблема с webMvcConfigurer. В этом конкретном случае ваш Bean-компонент SwaggerConfig аннотируется только @Configuration и @EnableSwagger2. Этих двух аннотаций достаточно, чтобы прочитать конфигурацию и запустить Springfox по URL-адресу:
http://servert:port /project-name/api/v2/api-docs
Но если вы хотите открыть веб-страницу, вам необходимо включить webMvc, добавив аннотацию @EnableWebMvc в свой компонент конфигурации, и предоставить webMvcConfigurer соответствующие обработчики ресурсов.
Без каких-либо других конфигураций кода, который я разместил ниже, достаточно, чтобы открыть пользовательский интерфейс Swagger:
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig {
@Bean
public Docket api(){
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
@Bean
public WebMvcConfigurer webMvcConfigurer()
{
return new WebMvcConfigurer()
{
@Override
public void addResourceHandlers( ResourceHandlerRegistry registry )
{
registry.addResourceHandler( "swagger-ui.html" ).addResourceLocations( "classpath:/META-INF/resources/" );
registry.addResourceHandler( "/webjars/**" ).addResourceLocations( "classpath:/META-INF/resources/webjars/" );
}
};
}
}
В моем случае понижение версии Swagger помогло.
Не могу увидеть swagger пользовательского интерфейса (404)
<swagger.version>3.0.0</swagger.version>
Работает отлично:
<swagger.version>2.9.2</swagger.version>
Зависимости:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
Это спасло мне день .. Спасибо за ответ, валижон ..
Я пробовал это, но это не сработало. Проблема в том, что мне удалось получить доступ к /v2/api-docs, но не к swagger-ui.html.
@ChetanOswal У меня была точно такая же ситуация. Пожалуйста, проверьте, перезагружает ли maven зависимости после изменения
Привет, @valijon, спасибо за быстрый ответ. Я решил проблему. Я открыл свое приложение в режиме incognito, и страница swagger-ui.html отображалась. Затем я снова открылся нормально, и он не работал. Я осмотрел страницу, перешел на вкладку сети, щелкнул правой кнопкой мыши API и выбрал опцию Clear browser cache, и вуаля! Страница отображается правильно. Удивлен, да, я.
(Репутация не позволяет мне комментировать ответы)
В моем случае понижение рейтинга тоже помогло
От:
<swagger.version>3.0.0</swagger.version>
К
<swagger.version>2.9.2</swagger.version>
Проверьте jar-версию swagger-ui. добавление
@Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2)
.select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any())
.build(); }
и в pom.xml
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
с URL: http: // localhost: 8080 / swagger-ui.html
У меня это сработало. Если вы используете другую версию jar-файла springfox-swagger-ui, просто откройте эту банку и проверьте путь к swagger-ui.html и соответствующим образом измените свой URL-адрес.
Для тех, кто использует более новую версию swagger, вот решение для доступа к странице swagger ui.
Замените это:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
с этим:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
в вашем файле pom.xml.
Получите доступ к странице по следующему URL-адресу (избегайте этого расширения .html): http: // локальный: 8080 / swagger-ui /
Восстановите и перезапустите сервер. И ваша проблема решена!
Попробуйте использовать
swagger-ui/index.html
вместо
swagger-ui.html
для Swagger 3.0 вы можете использовать
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
тогда пользовательский интерфейс будет http: // localhost: 8080 / swagger-ui / вместо http: // localhost: 8080 / swagger-ui.html
У меня такая же проблема.
1.) сначала вам нужно добавить следующие аннотации в файл конфигурации:
@SpringBootApplication
@EnableSwagger2
public class PostApplication {
public static void main(String[] args) {
SpringApplication.run(PostApplication.class, args);
}
}
2.) второй Добавьте 3 зависимости в pom.xml
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2 </artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
3.) наконец откройте http: // localhost: 8081 / swagger-ui.html8081: порт вашего сервера
ты починил?