zoukankan      html  css  js  c++  java
  • SpringBoot ---- Swagger 2

    Swagger2介绍

    前后端分离开发模式中,api文档是最好的沟通方式。

    Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

    1. 及时性 (接口变更后,能够及时准确地通知相关前后端开发人员)
    2. 规范性 (并且保证接口的规范性,如接口的地址,请求方式,参数及响应格式和错误信息)
    3. 一致性 (接口信息一致,不会出现因开发人员拿到的文档版本不一致,而出现分歧)
    4. 可测性 (直接在接口文档上进行测试,以方便理解业务)

    SpringBoot 整合 Swagger2

    添加依赖

    <!--swagger-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    

    编写配置类

    // 假设分模块,则需要与启动类用一样的包名
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket webApiConfig(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("webApi")  // 组名
                    .apiInfo(webApiInfo())
                    .select()
                    .paths(Predicates.not(PathSelectors.regex("/admin/.*")))  // 不包含此路径
                    .paths(Predicates.not(PathSelectors.regex("/error.*")))
                    .build();
        }
        private ApiInfo webApiInfo(){
            return new ApiInfoBuilder()  // 定义接口页面信息
                    .title("网站-课程中心API文档")
                    .description("本文档描述了课程中心微服务接口定义")
                    .version("1.0")
                    .contact(new Contact("Helen", "http://atguigu.com", "55317332@qq.com"))
                    .build();
        }
    }
    

    分模块相关

    <!-- 需要引入 -->
    <dependency>
        <groupId>com.xxx</groupId>
        <artifactId>模块名</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    
    // 在模块启动类中添加扫描。需要同包名
    @ComponentScan(backPackages = {"com.xxx"})
    

    访问 Localhost:8080/swagger-ui.html 即可

    整合 Spring Security

    // 配置权限豁免,才能正常访问 localhost:8080/swagger-ui.html
    .antMatchers("/swagger-ui.html").permitAll()
    .antMatchers("/swagger-resources/**").permitAll()
    .antMatchers("/webjars/**").permitAll()
    .antMatchers("/v2/api-docs").permitAll()
    

    Swagger2 注解详解

    注解 使用位置 参数
    @Api Class tags=“接口所在类说明”
    @ApiOperation Method value=“接口说明” notes=“备注"
    @ApiImplicitParam(s) Method name=“参数名” value=“参数说明” required=“是否必须”
    @ApiParam Params name=“参数名” vlaue=“参数说明” required=“是否必须”
    @ApiResponse(s) Method code=“状态码” message=“信息” response=“异常类”
    @ApiModel Class value=“Model 名” description=“描述”
    @ApiModelProperty Property value=“说明” name=“覆盖属性名” example=“示例”
    // UserController.java
    @Api(tags = "用户管理")
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        private UserService userService;
    
        @Autowired
        public UserController(UserService userService) {
            this.userService = userService;
        }
    
        /**
         * @PathVariable:通过 url 中读取值
         * @RequestBody:通过 json 获得对象
         */
        @ApiOperation(value = "根据 ID 返回用户")
        @ApiResponses({
                @ApiResponse(code = 200, message = "成功"),
                @ApiResponse(code = 400, message = "未知路径")
        })
        @GetMapping("findUser/{id}")
        public List<User> findUserById(
            @ApiParam(name = "id", value = "user ID", required = true)
            @PathVariable String id) {
            return userService.list();
        }
    }
    
    // User.java
    @ApiModel(value="User对象", description="用户信息表")
    public class User implements Serializable {
    
        private static final long serialVersionUID=1L;
    
        @ApiModelProperty(value = "用户 ID")
        private String id;
    
        @ApiModelProperty(value = "用户名")
        private String username;
    
        @ApiModelProperty(value = "密码")
        private String password;
    
        @ApiModelProperty(value = "0:女;1:男")
        private Integer sex;
    
        @ApiModelProperty(value = "手机号")
        private String tel;
    
        @ApiModelProperty(value = "邮箱")
        private String email;
    
        @ApiModelProperty(value = "0:超级管理员;1:管理员;2:读者")
        private Integer power;
    
        @ApiModelProperty(value = "创建时间")
        private Date createTime;
    
        @ApiModelProperty(value = "更新时间")
        private Date updateTime;
    
    }
    
  • 相关阅读:
    GitLab的基础使用-汉化配置
    GitLab的基础使用-数据备份与恢复
    Apache Hadoop集群扩容实战案例
    Hadoop 集群-完全分布式模式(Fully-Distributed Mode)
    HDFS参数调优总结
    网站压力测试 工具webbench
    2013年十大必知的大数据分析公司
    做电子商务网上开店应该读的书
    教你用大功率路由器覆盖3平方公里的WiFi广告
    中央推进城镇化建设 六行业分享25万亿蛋糕
  • 原文地址:https://www.cnblogs.com/qq188380780/p/12596828.html
Copyright © 2011-2022 走看看