美文网首页
SpringBoot实战—Swagger接口的文档

SpringBoot实战—Swagger接口的文档

作者: 遇见编程 | 来源:发表于2024-07-07 08:05 被阅读0次
    1. 导入 knife4j 的maven坐标

      在pom.xml中添加依赖

      <dependency>
         <groupId>com.github.xiaoymin</groupId>
         <artifactId>knife4j-spring-boot-starter</artifactId>
      </dependency>
      
    2. 在配置类中加入 knife4j 相关配置

      WebMvcConfiguration.java

      /**
           * 通过knife4j生成接口文档
           * @return
      */
          @Bean
          public Docket docket() {
              ApiInfo apiInfo = new ApiInfoBuilder()
                      .title("xxxx项目接口文档")
                      .version("1.0")
                      .description("这是我的接口文档描述")
                      .build();
              Docket docket = new Docket(DocumentationType.SWAGGER_2)
                      .apiInfo(apiInfo)
                      .select()
                      .apis(RequestHandlerSelectors.basePackage("com.sky.controller"))
                      .paths(PathSelectors.any())
                      .build();
              return docket;
          }
      
    3. 设置静态资源映射,否则接口文档页面无法访问

    /**
     * 配置类,注册web层相关组件
     */
    @Configuration
    @Slf4j
    public class WebMvcConfiguration extends WebMvcConfigurationSupport {
    /**
         * 通过knife4j生成接口文档
         *
         * @return
         */
        @Bean
        public Docket docket1(){
            log.info("准备生成接口文档...");
            ApiInfo apiInfo = new ApiInfoBuilder()
                    .title("外卖项目接口文档")
                    .version("2.0")
                    .description("外卖项目接口文档")
                    .build();
    
            Docket docket = new Docket(DocumentationType.SWAGGER_2)
                    .groupName("管理端接口")
                    .apiInfo(apiInfo)
                    .select()
                    //指定生成接口需要扫描的包
                    .apis(RequestHandlerSelectors.basePackage("com.sky.controller.admin"))
                    .paths(PathSelectors.any())
                    .build();
    
            return docket;
        }
    
        @Bean
        public Docket docket2(){
            log.info("准备生成接口文档...");
            ApiInfo apiInfo = new ApiInfoBuilder()
                    .title("外卖项目接口文档")
                    .version("2.0")
                    .description("外卖项目接口文档")
                    .build();
    
            Docket docket = new Docket(DocumentationType.SWAGGER_2)
                    .groupName("用户端接口")
                    .apiInfo(apiInfo)
                    .select()
                    //指定生成接口需要扫描的包
                    .apis(RequestHandlerSelectors.basePackage("com.sky.controller.user"))
                    .paths(PathSelectors.any())
                    .build();
    
            return docket;
        }
    
        /**
         * 设置静态资源映射
         *
         * @param registry
         */
        protected void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    }
    
    

    通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

    注解 说明
    @Api 用在类上,例如Controller,表示对类的说明
    @ApiModel 用在类上,例如entity、DTO、VO
    @ApiModelProperty 用在属性上,描述属性信息
    @ApiOperation 用在方法上,例如Controller的方法,说明方法的用途、作用

    接下来,使用上述注解,生成可读性更好的接口文档

    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    import java.io.Serializable;
    
    @Data
    @ApiModel(description = "员工登录时传递的数据模型")
    public class EmployeeLoginDTO implements Serializable {
    
        @ApiModelProperty("用户名")
        private String username;
    
        @ApiModelProperty("密码")
        private String password;
    }
    
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @ApiModel(description = "员工登录返回的数据格式")
    public class EmployeeLoginVO implements Serializable {
    
        @ApiModelProperty("主键值")
        private Long id;
    
        @ApiModelProperty("用户名")
        private String userName;
    
        @ApiModelProperty("姓名")
        private String name;
    
        @ApiModelProperty("jwt令牌")
        private String token;
    }
    
    /**
     * 员工管理
     */
    @RestController
    @RequestMapping("/admin/employee")
    @Slf4j
    @Api(tags = "员工相关接口")
    public class EmployeeController {
    
        @Autowired
        private EmployeeService employeeService;
        @Autowired
        private JwtProperties jwtProperties;
    
        /**
         * 登录
         *
         * @param employeeLoginDTO
         * @return
         */
        @PostMapping("/login")
        @ApiOperation(value = "员工登录")
        public Result<EmployeeLoginVO> login(@RequestBody EmployeeLoginDTO employeeLoginDTO)    {
            //..............
        }
    
        /**
         * 退出
         *
         * @return
         */
        @PostMapping("/logout")
        @ApiOperation("员工退出")
        public Result<String> logout() {
            return Result.success();
        }
    }
    
    

    启动服务:访问http://localhost:8080/doc.html

    相关文章

      网友评论

          本文标题:SpringBoot实战—Swagger接口的文档

          本文链接:https://www.haomeiwen.com/subject/tppwcjtx.html