Swagger

1.简介

号称世界上最流行的Api框架

RestFul Api文档在线自动生成工具

直接运行,可以在线测试API接口

支持多种语言(java,PHP..)

 

2.enable是否启动swagger,如果为false,swagger就不能再浏览器中访问,

测试代码:

@Configuration//配置类
@EnableSwagger2
public class SwaggerConfig {
    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(false)//enable是否启动swagger,如果为false,swagger就不能再浏览器中访问
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basePackage指定要扫描的包
                //any(),扫描全部包
                //none(),不扫描
                //withClassAnnoation:扫描类上的注解,参数是一个注解的反射对象
                //withMethodAnnoation:扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.lian.swagger.controller"))
                .paths(PathSelectors.ant("/lian/**"))
                .build();
    }
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact=new Contact("lian","https://mail.qq.com/","3082920@qq.com");

        return new ApiInfo(
                "lian的api文档",
                "即使再小的帆",
                "v1.0",
                "https://mail.qq.com/",
                contact,
                "Apache 2.0",
                "https://zhuanlan.zhihu.com/p/259565080",
                new ArrayList()
        );
    }
}

 

访问swagger-ui.html就会出现下面页面:

 3.但是问题来了,如果我希望我的swagger在生产环境中使用,在发布环境不使用那怎么办?

1。准备好两个配置文件

application-dev.properties 为生产环境

server.port=8081

application-pro.properties 为发布环境

server.port=8082

测试代码:

@Configuration//配置类
@EnableSwagger2
public class SwaggerConfig {
    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){
        Profiles profiles=Profiles.of("dev","test");
        //通过判断是否处在自己设定的环境中
        boolean flag=environment.acceptsProfiles(profiles);
        System.out.println(flag);
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(flag)//enable是否启动swagger,如果为false,swagger就不能再浏览器中访问
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basePackage指定要扫描的包
                //any(),扫描全部包
                //none(),不扫描
                //withClassAnnoation:扫描类上的注解,参数是一个注解的反射对象
                //withMethodAnnoation:扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.lian.swagger.controller"))
                .paths(PathSelectors.ant("/lian/**"))
                .build();
    }
View Code

运行接结果:

注意访问的是8082端口

 4.添加Api测试

在swagger配置类中可以配置多个Docket对象,并通过groupName用来记录代码的分工

@Configuration//配置类
@EnableSwagger2
public class SwaggerConfig {
    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(Environment environment){
        Profiles profiles=Profiles.of("dev","test");
        //通过判断是否处在自己设定的环境中
        boolean flag=environment.acceptsProfiles(profiles);
        System.out.println(flag);
        return new Docket(DocumentationType.SWAGGER_2).groupName("A")
                .apiInfo(apiInfo())
                .enable(flag)//enable是否启动swagger,如果为false,swagger就不能再浏览器中访问
                .select()
                //RequestHandlerSelectors,配置要扫描接口的方式
                //basePackage指定要扫描的包
                //any(),扫描全部包
                //none(),不扫描
                //withClassAnnoation:扫描类上的注解,参数是一个注解的反射对象
                //withMethodAnnoation:扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.lian.swagger.controller"))
                .paths(PathSelectors.ant("/lian/**"))
                .build();
    }
    @Bean
    public  Docket docket2(){return new Docket(DocumentationType.SWAGGER_2).groupName("B");}

    @Bean
    public  Docket docket3(){return new Docket(DocumentationType.SWAGGER_2).groupName("C");}
    //配置swagger信息的apiinfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact=new Contact("lian","https://mail.qq.com/","3082920@qq.com");

        return new ApiInfo(
                "lian的api文档",
                "即使再小的帆",
                "v1.0",
                "https://mail.qq.com/",
                contact,
                "Apache 2.0",
                "https://zhuanlan.zhihu.com/p/259565080",
                new ArrayList()
        );
    }
}
View Code

controller测试类:

package com.lian.controller;

import com.lian.pojo.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController

public class TestController {
    @RequestMapping("/t")
    public String mytest(){
        return "hello,swagger!";
    }

    //只要我们的接口中的返回值存在实体类,它就会被扫描到swagger中
    @PostMapping(value = "/user")
    public User user(){
        return new User();
    }
    @ApiOperation("Post测试类")

    @GetMapping (value = "/hello2")
    public String hello2(@ApiParam("用户名")User username){

        return "hello"+username;
    }

    @ApiOperation("Post测试类")

    @PostMapping(value = "/postt")
    public User postt(@ApiParam("用户名")User user){
        int i;
        return user;
    }
}
View Code

 

在前端页面可以清楚看到页面是否正常

 5.总结

对于swagger的使用:会更改页面swagger-ui.html的信息,会加注解,会看页面swagger-ui.html哪里错了即可

posted on 2023-05-13 15:28  醒醒起来  阅读(34)  评论(0编辑  收藏  举报