Swagger 原生

包添加

  1. <dependency>
  2. <groupId>io.springfox</groupId>
  3. <artifactId>springfox-boot-starter</artifactId>
  4. <version>3.0.0</version>
  5. </dependency>

开启Swagger

在Spring Boot 启动类添加注解

  1. @EnableOpenApi

Swagger 配置类

  1. @Configuration
  2. public class SwaggerConfig {
  3. @Bean
  4. public Docket createRestApi() {
  5. return new Docket(DocumentationType.OAS_30)
  6. .enable(true)
  7. .apiInfo(apiInfo())
  8. .select()
  9. .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
  10. .paths(PathSelectors.any())
  11. .build();
  12. }
  13. private ApiInfo apiInfo() {
  14. return new ApiInfoBuilder()
  15. // title
  16. .title("title")
  17. // 详细
  18. .description("详情描述")
  19. // 地址
  20. .termsOfServiceUrl("http://www.baidu.io")
  21. // 版本
  22. .version("1.0")
  23. .build();
  24. }
  25. }

访问地址

http://127.0.0.1/swagger-ui/index.html

knife4j

添加 JAR

  1. <dependency>
  2. <groupId>com.github.xiaoymin</groupId>
  3. <artifactId>knife4j-spring-boot-starter</artifactId>
  4. <version>3.0.3</version>
  5. </dependency>

创建配置文件

  1. @EnableSwagger2
  2. @EnableKnife4j
  3. @Configuration
  4. public class Knife4jConfiguration {
  5. @Value("${enable}")
  6. private boolean enable;
  7. @Bean
  8. public Docket defaultApi2() {
  9. Docket docket = new Docket(DocumentationType.OAS_30)
  10. .enable(enable)
  11. .apiInfo(apiInfo())
  12. .select()
  13. // 这里指定Controller扫描包路径
  14. .apis(RequestHandlerSelectors.basePackage("com.nuxi.zf.modular.api.controller"))
  15. .paths(PathSelectors.any()).build();
  16. return docket;
  17. }
  18. private ApiInfo apiInfo() {
  19. return new ApiInfoBuilder()
  20. // title
  21. .title("支付 API")
  22. // 详细
  23. .description("支付 API")
  24. // 地址
  25. .termsOfServiceUrl("http://www.nuxi.io")
  26. // 版本
  27. .version("1.0")
  28. .build();
  29. }
  30. }

Spring Boot 部分版本过高导致 doc.html 无法访问

  1. @Configuration
  2. public class StaticFileConfig implements WebMvcConfigurer {
  3. @Autowired
  4. private ConfigService configService;
  5. @Override
  6. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  7. Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getCode, "staticFileStatus"));
  8. if (null == config) {
  9. config = insertStaticFileStatus();
  10. }
  11. if (Integer.valueOf(config.getValue()) == 1) { // spring boot 静态文件形式访外部资源
  12. String staticFilePath = configService.getStaticFilePath();
  13. registry.addResourceHandler("/**") // 静态资源对外暴露的访问路径
  14. .addResourceLocations("classpath:/static/") // 工程静态文件
  15. .addResourceLocations("file:" + staticFilePath + "/"); // 外部静态路径
  16. // 解决swagger无法访问
  17. registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
  18. // 解决swagger的js文件无法访问
  19. registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  20. } else { // Nginx 文件服务器方式访问外部资源
  21. // 解决静态资源无法访问
  22. registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
  23. // 解决swagger无法访问
  24. registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
  25. // 解决swagger的js文件无法访问
  26. registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
  27. }
  28. }
  29. private Config insertStaticFileStatus() {
  30. Config config = Config.builder().name("静态资源访问状态").code("staticFileStatus").value("2").flag(1).remark("本地静态资源访问方式; 1 - spring boot 静态文件形式访问; 2 - Nginx 文件服务器方式访问").sort(1000).build();
  31. configService.save(config);
  32. return config;
  33. }
  34. }

启动类添加注解

  1. @EnableWebMvc