其他分享
首页 > 其他分享> > Swagger学习笔记

Swagger学习笔记

作者:互联网

Swagger简介

前后端分离

Vue+Springboot

后端时代:前端只用管理静态页面;html---->后端。模板引擎 JSP==>后端主力

前后端分离时代:

产生一个问题:

解决方案:

Swagger

在项目中使用Swagger需要使用springfox

SpringBoot继承Swagger

1.新建一个springboot=web项目

2.导入相关依赖(3.0.0版本访问不了)

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

3.编写Hello World工程

4.配置Swagger===>Config

@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
    
}

5.测试运行http://localhost:8080/swagger-ui.html

以上为集成swagger

配置Swagger

Swagger的bean实例Docket

Swagger配置扫描接口

Docket.select()

@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
    //配置了Swagger的Docket的bean实例
    //enable:是否启用swagger,如果为false,则swagger不能在浏览器中访问
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //.enable(false)
                .select()//select和build是一对,中间只有两个方法
                //RequestHandlerSelectors:配置要扫描接口的方式
                //basePackage:指定扫描的包
                //any():扫描全部
                //none:都不扫描
                //withMethodAnnotation:扫描方法上的注解
                //withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
                .apis(RequestHandlerSelectors.basePackage("com.hbxy.controller"))
                //paths():过滤什么路径
                //.paths(PathSelectors.ant("/hbxy/**")) 只访问hbxy包下的
                .build();
    }
    //配置Swagger信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("Jack", "http://baidu.com", "2645738794@qq.com");
        return new ApiInfo(
            "Jack的SwaggerAPI文档",
                "即使再小的帆也能远航",
                "1.0",
                "http://baidu.com",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()

        );
    }
}

我只希望我的Swagger在生产环境中使用,在发布的时候不使用?

@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
    //配置了Swagger的Docket的bean实例
    //enable:是否启用swagger,如果为false,则swagger不能在浏览器中访问
    @Bean
    public Docket docket(Environment environment){
        //设置要显示的swagger环境
        Profiles profiles = Profiles.of("dev","test");
        //获取项目的环境:通过environment.acceptsProfiles判断是否处在设定的环境当中
        boolean flag = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(flag)	
                .select()//select和build是一对,中间只有两个方法
                //RequestHandlerSelectors:配置要扫描接口的方式
                //basePackage:指定扫描的包
                //any():扫描全部
                //none:都不扫描
                //withMethodAnnotation:扫描方法上的注解
                //withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
                .apis(RequestHandlerSelectors.basePackage("com.hbxy.controller"))
                //paths():过滤什么路径
                //.paths(PathSelectors.ant("/hbxy/**")) 只访问hbxy包下的
                .build();
    }
    //配置Swagger信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("Jack", "https://www.cnblogs.com/henrystudy/", "2645738794@qq.com");
        return new ApiInfo(
            "Jack的SwaggerAPI文档",
                "即使再小的帆也能远航",
                "1.0",
                "https://www.cnblogs.com/guoguodong/",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()

        );
    }
}

application.properties

spring.profiles.active=dev

application-dev.properties(开发环境)

server.port=8081

application-pro.properties(生产环境)

server.port=8082

配置API文档的分组

.groupName("Jack")

如何配置多个分组:多个Docket实例即可

@Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("Tom");
    }
    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("June");
    }
    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("July");
    }

实体类配置;

RequestMethod.POST---》@RequestBody 一般用来处理 Content-Type: 为application/json 接收对象类型

RequestMethod.POST---》@RequestParam 这个也是从body中获取 用来处理 multipart/form-data (表单上传的)

RequestMethod.GET---》这种可以有参数用模型驱动,或者属性驱动获取,但是不可以用@注解从body获取

User.java

//@Api("注释")和@ApiModel("用户实体类")等价
@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("用户名")
    public String username;
    @ApiModelProperty("密码")
    public String password;
}

HelloController.java

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
    //只要我们的接口中,返回值中存在实体类,它就会被扫描到Swagger中
    @PostMapping("/user")
    public User user(){
        return new User();
    }

    //iOperation接口,不是放在类上的,是放在方法上
    @ApiOperation("Hello控制类")
    @GetMapping("/hello2")
    public String hello(@ApiParam("用户名") String username){
        return "hello"+username;
    }
    @ApiOperation("Post测试类")
    @PostMapping("/postt")
    public User postt(@ApiParam("用户名") User user){
        return user;
    }
}

Swagger皮肤设置

  1. bootstrap-ui 访问 http://localhost:8080/doc.html

    <!-- 引入swagger-bootstrap-ui包 /doc.html-->
    <dependency>
       <groupId>com.github.xiaoymin</groupId>
       <artifactId>swagger-bootstrap-ui</artifactId>
       <version>1.9.1</version>
    </dependency>
    

  1. Layui-ui 访问 http://localhost:8080/docs.html

    <!-- 引入swagger-ui-layer包 /docs.html-->
    <dependency>
       <groupId>com.github.caspar-chen</groupId>
       <artifactId>swagger-ui-layer</artifactId>
       <version>1.1.3</version>
    </dependency>
    

总结:

Swagger是一个优秀的工具

【注意点】在项目正式发布的时候,关闭Swagger!!!处于安全考虑并且节省内存

标签:return,com,笔记,学习,new,Swagger,Docket,public
来源: https://www.cnblogs.com/henrystudy/p/15371667.html