Swagger 原生
包添加
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
开启Swagger
在Spring Boot 启动类添加注解
@EnableOpenApi
Swagger 配置类
@Configuration
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30)
.enable(true)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// title
.title("title")
// 详细
.description("详情描述")
// 地址
.termsOfServiceUrl("http://www.baidu.io")
// 版本
.version("1.0")
.build();
}
}
访问地址
http://127.0.0.1/swagger-ui/index.html
knife4j
添加 JAR
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
创建配置文件
@EnableSwagger2
@EnableKnife4j
@Configuration
public class Knife4jConfiguration {
@Value("${enable}")
private boolean enable;
@Bean
public Docket defaultApi2() {
Docket docket = new Docket(DocumentationType.OAS_30)
.enable(enable)
.apiInfo(apiInfo())
.select()
// 这里指定Controller扫描包路径
.apis(RequestHandlerSelectors.basePackage("com.nuxi.zf.modular.api.controller"))
.paths(PathSelectors.any()).build();
return docket;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// title
.title("支付 API")
// 详细
.description("支付 API")
// 地址
.termsOfServiceUrl("http://www.nuxi.io")
// 版本
.version("1.0")
.build();
}
}
Spring Boot 部分版本过高导致 doc.html 无法访问
@Configuration
public class StaticFileConfig implements WebMvcConfigurer {
@Autowired
private ConfigService configService;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getCode, "staticFileStatus"));
if (null == config) {
config = insertStaticFileStatus();
}
if (Integer.valueOf(config.getValue()) == 1) { // spring boot 静态文件形式访外部资源
String staticFilePath = configService.getStaticFilePath();
registry.addResourceHandler("/**") // 静态资源对外暴露的访问路径
.addResourceLocations("classpath:/static/") // 工程静态文件
.addResourceLocations("file:" + staticFilePath + "/"); // 外部静态路径
// 解决swagger无法访问
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
// 解决swagger的js文件无法访问
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
} else { // Nginx 文件服务器方式访问外部资源
// 解决静态资源无法访问
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
// 解决swagger无法访问
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
// 解决swagger的js文件无法访问
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
private Config insertStaticFileStatus() {
Config config = Config.builder().name("静态资源访问状态").code("staticFileStatus").value("2").flag(1).remark("本地静态资源访问方式; 1 - spring boot 静态文件形式访问; 2 - Nginx 文件服务器方式访问").sort(1000).build();
configService.save(config);
return config;
}
}
启动类添加注解
@EnableWebMvc