Я пытаюсь интегрировать свою версию Spring Boot 2.0.1.RELEASE с swagger.
Из этого Сообщение блога казалось, что это будет легко, просто добавив две зависимости Maven, и все должно работать.
Поэтому я добавил в pom следующие зависимости:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
И создал bean-компонент SwaggerConfig:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
return docket;
}
}
И в файле свойств я получил эти 3 записи во время попыток заставить его работать:
spring.application.name=cat-service
management.server.servlet.context-path=/cat-service
server.servlet.contextPath=/cat-service
Но в конце при доступе
http://localhost:8080/cat-service/api/v2/api-docs
или на странице пользовательского интерфейса по адресу
http://localhost:8080/cat-service/swagger-ui.html
Я получаю ошибку page not found.
Я нашел это проблемы на странице чванства github и этот вопрос в stackoverflow, но мне не удалось изменить свою ошибку 404.
Вы добавили конфигурацию swagger?
пружинный упор для вас не подходит
Дубликат: stackoverflow.com/a/64333853/410439




У меня это сработало, я использовал WebMvcConfigurer вместо WebMvcConfigurerAdapter, потому что этот класс уже устарел.
@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.illary.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(metaData());
}
private ApiInfo metaData() {
return new ApiInfoBuilder()
.title("Spring Boot Swagger App")
.description("\"Spring Boot Swagger Server App\"")
.version("1.0.0")
.license("Apache License Version 2.0")
.licenseUrl("https://www.apache.org/licenses/LICENSE-2.0\"")
.build();
}
public ApiInfo apiInfo() {
final ApiInfoBuilder builder = new ApiInfoBuilder();
builder.title("Swagger Test App").version("1.0").license("(C) Copyright Test")
.description("The API provides a platform to query build test swagger api");
return builder.build();
}
@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/");
}
}
Мне удалось заставить его работать с загрузочной версией Spring 2.0.4.RELEASE и это сообщение в блоге:
Я добавил эти зависимости:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
И этот файл конфигурации:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SpringFoxConfig {
@Bean
public Docket apiDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
}
И это сработало.
Пользовательский интерфейс Swagger находится по адресу /swagger-ui.html#.
У меня стало работать после удаления @EnableWebMvc
его удаление среди прочего вызывает Error creating bean with name webMvcRequestHandlerProvider ...
Сначала добавьте файл SwaggerConfig.java в тот же пакет с файлом Springboot, как в следующем примере.
@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build();
}
@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/");
}
}
попробуй это
http://localhost:8080/spring-security-rest/api/swagger-ui.html
или же
http://localhost:8080/spring-security-rest/swagger-ui.html
Если это не сработает, попробуйте изменить путь в application.properties.
Добавьте это в application.properties:
server.servlet-path=/loop-service
и попробуйте следующие URL-адреса:
http://localhost:8080/loop-service/swagger-ui.html (Документы пользовательского интерфейса)
http://localhost:8080/loop-service/v2/api-docs (документы JSON)
Не забудьте изменить server.contextPath на server.servlet.contextPath, если вы обновите Spring Boot до 2+.
Решение: Вам просто нужно удалить @EnableWebMvc из классов конфигурации.
Описание:@EnableWebMvc включает класс org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport. В spring -boot есть класс автоконфигурации org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration, который имеет аннотацию @ConditionalOnMissingBean (WebMvcConfigurationSupport.class).
Что мы получаем в итоге: Добавляя @EnableWebMvc в проект, мы сами становимся ответственными за все, так как отключаем автоконфигурацию spring -boot.
его удаление среди прочего вызывает Error creating bean with name webMvcRequestHandlerProvider ...
Столкнулся с той же проблемой, только что решенной с изменением зависимости Обратитесь к https://www.vojtechruzicka.com/documenting-spring-boot-rest-api-swagger-springfox/
скомпилировать "io.springfox: springfox-swagger2: 2.9.2"
Раньше пользовался - Не работает
группа компиляции: 'io.springfox', имя: 'springfox-swagger2', версия: '3.0.0'
После добавления строки ниже в application.properties он начал работать
spring.web.resources.static-locations: classpath:/webapp/
Но я не уверен, зачем нам это добавлять. Добавление кода, который, я думаю, может быть актуальным. Зависимости указаны ниже:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- Swagger Dependencies -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
И основной класс как
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@EnableSwagger2
public class ProxyApplication {
public static void main(String[] args) {
SpringApplication.run(ProxyApplication.class, args);
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.ghsatpute.proxy"))
.paths(PathSelectors.any())
.build();
}
}
Добавьте это, если это может кому-то помочь. Этот URL работал у меня
http://localhost:8003/v2/api-docs
и для swagger-ui этот URL-адрес работал у меня из коробки:
http://localhost:8003/swagger-ui.html
Проверьте, используете ли вы правильно настроенный URL-адрес для характеристик swagger. URL-адреса типа http://localhost:8080/spring-security-rest/api/swagger-ui/
не сработало, и я получал 404.
У меня также была такая же проблема (404 Not Found с springfox 3.0.0). Установив уровень ведения журнала на «DEBUG», я смог увидеть конечные точки для /v3/api-docs, и они работали, но о «swagger-ui» ничего не было.
Наконец я нашел https://github.com/springfox/springfox/issues/3285, который указывает на то, что:
the new url in 3.0.0 is /swagger-ui/index.html or /swagger-ui/ rather than /swagger-ui.html"
Могли они не добавить журнал отладки, чтобы указать, где доступен пользовательский интерфейс Swagger?
Пожалуйста, проверьте ссылку: https://springfox.github.io/springfox/docs/current/
«2.1.3. Переход с существующей версии 2.x»
Вы можете удалить springfox-swagger2 и springfox-swagger-ui из вашего pom.xml и вместо этого добавить springfox-boot-starter (например, версия 3.0.0). Также вы можете удалить аннотации @ EnableSwagger2
И: "расположение swagger-ui перемещено с http: //host/context-path/swagger-ui.html на http: //host/context-path/swagger-ui/index.html ИЛИ http: // host / context-path / swagger-ui / для краткости. Благодаря этому он работает намного лучше, вытаскивая его как веб-банку и отключая, используя свойства конфигурации, если это не нужно.
Вам также потребуется правильная конфигурация, включая аннотацию
@EnableSwagger2, как указано в статье. Есть ли у вас они, и если да, не могли бы вы также опубликовать их в своем вопросе?