SpringBoot集成Swagger3.0

共 4061字,需浏览 9分钟

 ·

2020-12-28 03:29

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

66套java从入门到精通实战课程分享 

1、pom.xml


  io.springfox
  springfox-boot-starter
  3.0.0


2、SwaggerConfig

/**
 * @author: zek
 * @desc: swagger
 */
@EnableOpenApi
@Configuration
public class SwaggerConfig implements WebMvcConfigurer {
  @Bean
  public Docket createRestApi() {
    return new Docket(DocumentationType.OAS_30)
        .pathMapping("/")
        // 定义是否开启swagger,false为关闭,可以通过变量控制
        .enable(true)
        // 将api的元信息设置为包含在json ResourceListing响应中。
        .apiInfo(apiInfo())
        // 接口调试地址
        .host("http://localhost:8080")
        // 选择哪些接口作为swagger的doc发布
        .select()
        .apis(RequestHandlerSelectors.basePackage("xx.xx.xx.controller"))
        .paths(PathSelectors.any())
        .build()
        // 支持的通讯协议集合
        .protocols(Sets.newHashSet("http""https"))
        // 授权信息设置,必要的header token等认证信息
        .securitySchemes(securitySchemes())
        // 授权信息全局应用
        .securityContexts(securityContexts());
  }

  /** API 页面上半部分展示信息 */
  private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
        .title(" Api Doc")
        .description("SpringFox 3.0.0 发布: https://xx.xx.xx/xx/swagger-ui/index.html")
        .contact(new Contact("lighter", null, "xx@163.com"))
        .version(
            "Application Version: "
                + "1.0.0"
                + ", Spring Boot Version: "
                + SpringBootVersion.getVersion())
        .build();
  }

  /** 设置授权信息 */
  private List securitySchemes() {
    ApiKey apiKey = new ApiKey("BASE_TOKEN""token", In.HEADER.toValue());
    return Collections.singletonList(apiKey);
  }

  /** 授权信息全局应用 */
  private List securityContexts() {
    return Collections.singletonList(
        SecurityContext.builder()
            .securityReferences(
                Collections.singletonList(
                    new SecurityReference(
                        "BASE_TOKEN",
                        new AuthorizationScope[] {new AuthorizationScope("global""")})))
            .build());
  }

  /** 通用拦截器排除swagger设置,所有拦截器都会自动加swagger相关的资源排除信息 */
  @SuppressWarnings("unchecked")
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    try {
      Field registrationsField =
          FieldUtils.getField(InterceptorRegistry.class, "registrations"true);
      List registrations =
          (List) ReflectionUtils.getField(registrationsField, registry);
      if (registrations != null) {
        for (InterceptorRegistration interceptorRegistration : registrations) {
          interceptorRegistration
              .excludePathPatterns("/swagger**/**")
              .excludePathPatterns("/webjars/**")
              .excludePathPatterns("/v3/**")
              .excludePathPatterns("/doc.html");
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


3、使用

        1.controller层使用

    @Api(tags = {"1. 文章"})
    @RestController
    @RequestMapping("/article")
    public class ArticleController {}

        2.接口使用

    @ApiOperation(value = "文章列表")
    @GetMapping("/article")
    public Result> articleList(@ModelAttribute ArticleListReq articleListReq) {
      return articleService.articleList(articleListReq);
    }

        3.Model使用

    @ApiModel(value = "ArticleListReq文章列表请求实体")
    @Data
    public class ArticleListReq {
      @ApiModelProperty(value = "pageNum")
      private Integer pageNum;

      @ApiModelProperty(value = "pageSize")
      private Integer pageSize;

      @ApiModelProperty(value = "关键字搜索:标题、描述、内容")
      private String keyword;

      @ApiModelProperty(value = "资源类型")
      private Integer type;
    }

        4.忽略接口

    @ApiIgnore

       5.Swagger-ui URL

    https://ip:port或域名/设置的请求前缀/swagger-ui/index.html#/

       6.base-error-controller

    SwaggerConfig新增指定包
    .apis(RequestHandlerSelectors.basePackage("xx.xx.xx.controller"))

    4、查看页面

    5、发现部分注解参数使用了,并没有效果,

    1. entity中的@ApiModel注解中的参数加了和没加一个效果,所以,直接写@ApiModel就可以了。

    2. @ApiParam(value = “文章ID”) 注解中的value参数只有和:@PathVariable(value = “id”) 以及@RequestParam使用,value参数才会有效果。其他没有



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:

https://blog.csdn.net/qq_17213067/article/details/111573316





粉丝福利:Java从入门到入土学习路线图

???

?长按上方微信二维码 2 秒


感谢点赞支持下哈 

浏览 55
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报