栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

swagger 笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

swagger 笔记

一、为 Spring Boot 项目配置 Swagger
  1. 新建一个 Spring Boot 项目
  2. 导入 swagger 相关依赖
    
        io.springfox
        springfox-swagger2
        2.9.2
    
    
    
        io.springfox
        springfox-swagger-ui
        2.9.2
    
    
  3. 编写 Controller 类
  4. 编写 Swagger 配置类
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    }
    

打上 @EnableSwagger2 注解后,就可以访问 swagger 为我们生成的接口文档了。

文档地址:http://localhost:8080/swagger-ui.html

二、进一步配置 Swagger 2.1 api 的筛选与分组 自定义注解实现接口忽略

1.自定义一个注解

@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyIgnoreAnnotation {
    String value() default "";
}

2.在要忽略的api上打上该注解

@RestController
public class MyController {

    @MyIgnoreAnnotation
    @PostMapping("/get")
    public String postGet(String name, String age) {
        return "post_get";
    }

    @MyIgnoreAnnotation
    @GetMapping("/get")
    public String get(String a) {
        return "get";
    }

}

3.对自定义注解的功能进行配置,实现忽略被该注解标注的接口

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket docket() {

        Docket docket = new Docket(documentationType.SWAGGER_2);
        docket.apiInfo(adminApiInfo()); // api文档的描述信息
        docket.select()
                .apis(Predicates.not(RequestHandlerSelectors.withMethodAnnotation(MyIgnoreAnnotation.class))) // 自定义注解实现接口忽略
                .apis(RequestHandlerSelectors.basePackage("com.ai.swaggertest"))
                .build();

        return docket;

    }

    private ApiInfo adminApiInfo() {
        return new ApiInfoBuilder()
                .title("后台管理系统-API文档")
                .description("本文档描述了后台管理系统接口")
                .version("1.0")
                .contact(new Contact("John Wick", "https://baidu.com", "593635848@qq.com"))
                .build();
    }

}

设置扫描的包

可以通过 apis() 方法设置哪个包中内容被扫描。

@Bean
public Docket getDocket() {
    return new Docket(documentationType.SWAGGER_2)
            .apiInfo(adminApiInfo())
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.ai.swaggertest.controller"))
            .build();
}

若包路径没有指定正确,则不会在 api 文档中显示该包下的 api:

则对应的 swagger 页面为:

若包路径指定正确,则可以显示该包下的 api 。

设置路径范围

通过 paths() 可以设置满足什么样规则的 url 被生成接口文档,可以使用正则表达式进行匹配

1.定义接口如下:

@RestController
public class MyController {

    @PostMapping("/get/hello")
    public String postGet(String name, String age) {
        return "post_get";
    }

    @GetMapping("/get/hi")
    public String get(String a) {
        return "get";
    }

    @GetMapping("/post/hola")
    public String post(String a) {
        return "post";
    }

    @GetMapping("/push/hola")
    public String push(String a) {
        return "push";
    }

}

2.编写 swagger 配置类

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket docket() {
        Docket docket = new Docket(documentationType.SWAGGER_2);
        
        docket.apiInfo(adminApiInfo()); // api文档的描述信息
        
        docket.select()
        		// 在文档中呈现以“/get/”或者“/push/”开头的api
                .paths(Predicates.or(PathSelectors.regex("/get/.*"), PathSelectors.regex("/push/.*")))
                .build();

        return docket;
    }

    private ApiInfo adminApiInfo() {
        return new ApiInfoBuilder()
                .title("后台管理系统-API文档")
                .description("本文档描述了后台管理系统接口")
                .version("1.0")
                .contact(new Contact("John Wick", "https://baidu.com", "593635848@qq.com"))
                .build();
    }

}

生成的接口文档如下:

三、Swagger 常用注解
注解作用
@ApiIgnore隐藏 api 接口
@ApiIgnore

@ApiIgnore 可以打在类、方法和方法参数上。打在类上,可以在文档隐藏该(控制器)类。打在方法参数上,则可以在文档中隐藏该方法参数。

原来的代码:

@RestController
public class MyController {

    @PostMapping("/get")
    public String postGet() {
        return "post_get";
    }

    @GetMapping("/get")
    public String get(String a) {
        return "get";
    }

}

加上注解后:

@RestController
public class MyController {

    @ApiIgnore
    @PostMapping("/get")
    public String postGet() {
        return "post_get";
    }

    @GetMapping("/get")
    public String get(String a) {
        return "get";
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270283.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号