一、gradle 依赖:
implementation 'com.github.xiaoymin:knife4j-spring-boot-starter:3.0.3'
implementation 'io.springfox:springfox-boot-starter:3.0.0'
二、:SwaggerConfiguration配置类
@Configuration
@EnableSwagger2
@EnableKnife4j
public class SwaggerConfiguration {
//最简单的配置,自己拓展
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())//匹配所有路径
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().build();
}
/*此处配置springboot2.6及以上才需要加否则会报:
*org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'
*/
/**
* Springfox 依赖 javax.swing.Spring MVC 的路径匹配策略是 ant-path-matcher,
* 而 Spring Boot 2.6.x以上版本的默认匹配策略是 path-pattern-matcher
* spring.mvc.pathmatch.matching-strategy=ant_path_matcher//application.yml上加
*/
@Bean
public static BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() {
return new BeanPostProcessor() {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) {
customizeSpringfoxHandlerMappings(getHandlerMappings(bean));
}
return bean;
}
private <T extends RequestMappingInfoHandlerMapping> void customizeSpringfoxHandlerMappings(List<T> mappings) {
List<T> copy = mappings.stream()
.filter(mapping -> mapping.getPatternParser() == null)
.collect(Collectors.toList());
mappings.clear();
mappings.addAll(copy);
}
@SuppressWarnings("unchecked")
private List<RequestMappingInfoHandlerMapping> getHandlerMappings(Object bean) {
try {
Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings");
field.setAccessible(true);
return (List<RequestMappingInfoHandlerMapping>) field.get(bean);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
};
}
}`
三:地址:http://ip:port/doc.html
页面: