Spring Boot整合Swaager

Spring Boot整合Swaager

  1. 导入依赖

    
    <dependency>
        <groupId>io.springfoxgroupId>
        <artifactId>springfox-swagger2artifactId>
        <version>2.9.2version>
    dependency>
    <dependency>
        <groupId>io.springfoxgroupId>
        <artifactId>springfox-swagger-uiartifactId>
        <version>2.9.2version>
    dependency>
    
  2. 添加配置类 创建一个swagger2的配置类

    package com.xm.user.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    /**
     * @title: SwaggerConfig
     * @projectName: xm-parent
     * @description: TODO
     * @author: Zack_Tzh
     * @date: 2020/1/7  15:21
     */
    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .pathMapping("/")
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.xm.user.controller"))//包路径
                    .paths(PathSelectors.any())
                    .build().apiInfo(new ApiInfoBuilder()
                            .title("SpringBoot整合Swagger")//标题
                            .description("SpringBoot整合Swagger,详细信息......")//描述消息
                            .version("9.0")//版本信息
                            .contact(new Contact("Zack_Tzh","https://blog.csdn.net/Zack_tzh","[email protected]"))
                            .license("The Apache License")
                            .licenseUrl("http://www.baidu.com")
                            .build());
        }
    }
    //这里提供一个配置类,首先通过@EnableSwagger2注解启用Swagger2,然后配置一个Docket Bean,这个Bean中,配置映射路径和要扫描的接口的位置,在apiInfo中,主要配置一下Swagger2文档网站的信息,例如网站的title,网站的描述,联系人的信息
    
  3. 创建接口

    Swagger2相关的注解其实并不多,而且很容易懂,下面我来分别向小伙伴们举例说明:

    @RestController
    @Api(tags = "用户管理相关接口")
    @RequestMapping("/user")
    public class UserController {
    
        @PostMapping("/")
        @ApiOperation("添加用户的接口")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "username", value = "用户名", defaultValue = "李四"),
                @ApiImplicitParam(name = "address", value = "用户地址", defaultValue = "深圳", required = true)
        }
        )
        public RespBean addUser(String username, @RequestParam(required = true) String address) {
            return new RespBean();
        }
    
        @GetMapping("/")
        @ApiOperation("根据id查询用户的接口")
        @ApiImplicitParam(name = "id", value = "用户id", defaultValue = "99", required = true)
        public User getUserById(@PathVariable Integer id) {
            User user = new User();
            user.setId(id);
            return user;
        }
        @PutMapping("/{id}")
        @ApiOperation("根据id更新用户的接口")
        public User updateUserById(@RequestBody User user) {
            return user;
        }
    }
    

    这里边涉及到多个API,我来向小伙伴们分别说明:

    @Api注解可以用来标记当前Controller的功能。
    @ApiOperation注解用来标记一个方法的作用。
    @ApiImplicitParam注解用来描述一个参数,可以配置参数的中文含义,也可以给参数设置默认值,这样在接口测试的时候可以避免手动输入。
    如果有多个参数,则需要使用多个@ApiImplicitParam注解来描述,多个@ApiImplicitParam注解需要放在一个@ApiImplicitParams注解中。
    需要注意的是,@ApiImplicitParam注解中虽然可以指定参数是必填的,但是却不能代替@RequestParam(required = true),前者的必填只是在Swagger2框架内必填,抛弃了Swagger2,这个限制就没用了,所以假如开发者需要指定一个参数必填,@RequestParam(required = true)注解还是不能省略。

    如果参数是一个对象(例如上文的更新接口),对于参数的描述也可以放在实体类中。例如下面一段代码:

    @ApiModel
    public class User {
        @ApiModelProperty(value = "用户id")
        private Integer id;
        @ApiModelProperty(value = "用户名")
        private String username;
        @ApiModelProperty(value = "用户地址")
        private String address;
        //getter/setter
    }
    
  4. 在Security中的配置

    如果我们的Spring Boot项目中集成了Spring Security,那么如果不做额外配置,Swagger2文档可能会被拦截,此时只需要在Spring Security的配置类中重写configure方法,添加如下过滤即可:

    /***
         * Http安全配置,对每个到达系统的http请求链接进行校验
         * @param http
         * @throws Exception
         */
        @Override
        public void configure(HttpSecurity http) throws Exception {
            //所有请求必须认证通过
            http.authorizeRequests()
                    //下边的路径放行
                    .antMatchers("/swagger-resources/**","/webjars/**","/v2/**","/swagger-ui.html") //配置地址放行
                    .permitAll()
                    .anyRequest()
                    .authenticated();    //其他地址需要认证授权
        }
    

    此时启动项目,输入http://localhost:8080/swagger-ui.html就行了

    参考博客:https://blog.csdn.net/u012702547/article/details/88775298

你可能感兴趣的:(swaager)