HTML、Javascript、CSS的一个集合,可以动态地根据注解生成在线API文档

  1. <!--Swagger-UI API文档生产工具-->
  2. <dependency>
  3. <groupId>io.springfox</groupId>
  4. <artifactId>springfox-swagger2</artifactId>
  5. <version>2.7.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>io.springfox</groupId>
  9. <artifactId>springfox-swagger-ui</artifactId>
  10. <version>2.7.0</version>
  11. </dependency>

常用注解

  • @Api:用于修饰Controller类,生成Controller相关文档信息
  • @ApiOperation:用于修饰Controller类中的方法,生成接口方法相关文档信息
  • @ApiParam:用于修饰接口中的参数,生成接口参数相关文档信息
  • @ApiModelProperty:用于修饰实体类的属性,当实体类是请求参数或返回结果时,直接生成相关文档信息

配置类

  1. package com.iron.latro.mallcommon.config;
  2. import com.iron.latro.mallcommon.domain.SwaggerProperties;
  3. import io.swagger.annotations.Api;
  4. import io.swagger.annotations.ApiOperation;
  5. import org.springframework.context.annotation.Bean;
  6. import springfox.documentation.builders.ApiInfoBuilder;
  7. import springfox.documentation.builders.PathSelectors;
  8. import springfox.documentation.builders.RequestHandlerSelectors;
  9. import springfox.documentation.service.ApiInfo;
  10. import springfox.documentation.service.ApiKey;
  11. import springfox.documentation.service.AuthorizationScope;
  12. import springfox.documentation.service.Contact;
  13. import springfox.documentation.service.SecurityReference;
  14. import springfox.documentation.spi.DocumentationType;
  15. import springfox.documentation.spi.service.contexts.SecurityContext;
  16. import springfox.documentation.spring.web.plugins.Docket;
  17. import java.util.ArrayList;
  18. import java.util.List;
  19. /**
  20. * Swagger基础配置
  21. * Created by macro on 2020/7/16.
  22. */
  23. public abstract class BaseSwaggerConfig {
  24. @Bean
  25. public Docket createRestApi() {
  26. SwaggerProperties swaggerProperties = swaggerProperties();
  27. Docket docket = new Docket(DocumentationType.SWAGGER_2)
  28. .apiInfo(apiInfo(swaggerProperties))
  29. .select()
  30. // 为当前包下 controller 生成 API 文档
  31. .apis(RequestHandlerSelectors.basePackage(swaggerProperties.getApiBasePackage()))
  32. // 为有@Api注解的Controller生成API文档
  33. // .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
  34. // 为有@ApiOperation注解的方法生成API文档
  35. // .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
  36. .paths(PathSelectors.any())
  37. .build();
  38. // 添加登录认证
  39. if (swaggerProperties.isEnableSecurity()) {
  40. docket.securitySchemes(securitySchemes()).securityContexts(securityContexts());
  41. }
  42. return docket;
  43. }
  44. private ApiInfo apiInfo(SwaggerProperties swaggerProperties) {
  45. return new ApiInfoBuilder()
  46. .title(swaggerProperties.getTitle())
  47. .description(swaggerProperties.getDescription())
  48. .contact(new Contact(swaggerProperties.getContactName(), swaggerProperties.getContactUrl(), swaggerProperties.getContactEmail()))
  49. .version(swaggerProperties.getVersion())
  50. .build();
  51. }
  52. private List<ApiKey> securitySchemes() {
  53. //设置请求头信息
  54. List<ApiKey> result = new ArrayList<>();
  55. ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");
  56. result.add(apiKey);
  57. return result;
  58. }
  59. private List<SecurityContext> securityContexts() {
  60. //设置需要登录认证的路径
  61. List<SecurityContext> result = new ArrayList<>();
  62. result.add(getContextByPath("/*/.*"));
  63. return result;
  64. }
  65. private SecurityContext getContextByPath(String pathRegex) {
  66. return SecurityContext.builder()
  67. .securityReferences(defaultAuth())
  68. .forPaths(PathSelectors.regex(pathRegex))
  69. .build();
  70. }
  71. private List<SecurityReference> defaultAuth() {
  72. List<SecurityReference> result = new ArrayList<>();
  73. AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
  74. AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
  75. authorizationScopes[0] = authorizationScope;
  76. result.add(new SecurityReference("Authorization", authorizationScopes));
  77. return result;
  78. }
  79. /**
  80. * 自定义Swagger配置
  81. */
  82. public abstract SwaggerProperties swaggerProperties();
  83. }