не подключается swagger на java
Народ всем привет, я использую чистый spring (без boot) и никак не могу подключить Swagger. Есть такие зависимости
<swaggeer.version>3.0.0</swaggeer.version>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swaggeer.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swaggeer.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-spring-webmvc</artifactId>
<version>${swaggeer.version}</version>
</dependency>
и такой AppConfig
@Configuration
@EnableWebMvc
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "org.example")
@PropertySource("classpath:application.yaml")
public class AppConfig implements WebMvcConfigurer {
@Bean
public YamlPropertiesFactoryBean yamlProperties() {
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("application.yaml"));
return yaml;
}
@Bean
public DriverManagerDataSource dataSource() {
YamlPropertiesFactoryBean yaml = yamlProperties();
yaml.afterPropertiesSet();
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(Objects.requireNonNull(yaml.getObject()).getProperty("database.driver-class-name"));
dataSource.setUrl(yaml.getObject().getProperty("database.url"));
dataSource.setUsername(yaml.getObject().getProperty("database.username"));
dataSource.setPassword(yaml.getObject().getProperty("database.password"));
return dataSource;
}
@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
return new NamedParameterJdbcTemplate(dataSource());
}
@Bean
public SpringLiquibase liquibase() {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource());
liquibase.setChangeLog("classpath:db/changelog/changelog-master.xml");
return liquibase;
}
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
return objectMapper;
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("org.example.web"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Car shop")
.description("API для управления магазином по продаже автомобилей.")
.version("1.0.0")
.build();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui/")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
но при попытке перейти по ссылке http://localhost:28087/swagger-ui/ (tomcat работает у меня на порту 28087) всегда браузер выдает 404, а в логах
14:46:41.251 [http-nio-28087-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet -- GET "/swagger-ui/", parameters={}
14:46:41.286 [http-nio-28087-exec-2] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping -- Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/webjars/]]
14:46:41.295 [http-nio-28087-exec-2] DEBUG org.springframework.web.servlet.resource.ResourceHttpRequestHandler -- Resource not found
14:46:41.296 [http-nio-28087-exec-2] DEBUG org.springframework.web.servlet.DispatcherServlet -- Completed 404 NOT_FOUND
подскажите добрые люди как подключить swagger
Ответы (2 шт):
Автор решения: Alexandr
→ Ссылка
Это произошло со мной, я использовал SpringBoot 1.5.16 и Springfox 2.9.1.
В моем application.propertiesя определил server.servlet-path=/api, но, каким-то образом, swagger-ui игнорировал определенное значение. Я перепробовал много разных способов заставить это работать, и, наконец, нашел обходной путь:
@Configuration @EnableSwagger2 public class SwaggerConfiguration extends WebMvcConfigurationSupport {
@Bean
public Docket apiMonitoramento() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("REST API")
.description("Servicesx")
.build();
}
@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/");
}
}