Springboot整合Swagger接口框架常用注解与自定义ui

14 篇文章 0 订阅
1 篇文章 0 订阅

写在前边: 前后端分离的大趋势,我们需要一个好的api文档工具,其中swagger是一个很不错的api框架。

新建springbootweb项目

导入swagger依赖:

<!-- 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>

配置类:

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

访问:http://localhost:8080/swagger-ui.html

在这里插入图片描述

入门配置:

1.配置一个swaggerconfig类:

@Configuration//表明配置类
@EnableSwagger2//开启Swagger2的自动注解
public class SwaggerConfig {
}

2.配置docket以配置Swagger具体参数

/**
 *   配置docket以配置Swagger具体参数:一个docket一个分组
 */
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)}

3.配置文档信息:

/**
 * 配置文档信息
 */
public ApiInfo apiInfo(){
    /*
           private final String name;
           private final String url;
           private final String email;
    */
    //联系人信息
    Contact contact = new Contact("Codewhite","http://codewhite.cn","405773808@qq.com");
    return new ApiInfo(
      "Swagger项目练习",// 标题
            "配置Swagger的文档",// 描述
            "v1.0", // 版本
            "http://codewhite.cn",// 组织链接
            contact, // 联系人信息
            "Apach 2.0 许可",// 许可
            "许可链接", // 许可连接
            new ArrayList<>()// 扩展

    );

4.将配置信息加入docket

   /**
     *   配置docket以配置Swagger具体参数
     */
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

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

在这里插入图片描述

配置扫描接口

@Configuration//配置类
@EnableSwagger2//启用swagger
public class SwaggerConfig {

    /**
     * 配置docket以配置Swagger具体参数
     */
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                //通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
            
                /* apis可填的值 配置如何扫描接口
                any() // 扫描所有,项目中的所有接口都会被扫描到
                none() // 不扫描接口
                1.通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
                withMethodAnnotation(final Class<? extends Annotation> annotation)
                2.通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
                withClassAnnotation(final Class<? extends Annotation> annotation)
                basePackage(final String basePackage) // 根据包路径扫描接口
                 */
                .select().apis(RequestHandlerSelectors.basePackage("cn.codewihte.controller"))
                /*  paths 配置过滤
                 *  any() // 任何请求都扫描
                 *  none() // 任何请求都不扫描
                 *  regex(final String pathRegex) // 通过正则表达式控制
                 *  ant(final String antPattern) // 通过ant()控制
                 */
                .paths(PathSelectors.ant("/xiaobai/**")).build();


    }
}

配置Swagger开关

如何动态配置当项目处于test、dev环境时显示swagger,处于生产环境时不显示:

@Bean
    public Docket docket(Environment environment) {

        // 设置要显示swagger的环境
        Profiles profiles = Profiles.of("dev","test");

        // 判断当前是否处于该环境 如果处于显示true
        boolean isFlag = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .enable(isFlag) //配置是否启用Swagger,如果是false,在浏览器将无法访问
                .select().apis(RequestHandlerSelectors.basePackage("cn.codewihte.controller"))
                .build();

    }

配置API分组

在这里插入图片描述
1、如果没有配置分组,默认是default。通过groupName()方法即可配置分组:

@Bean
public Docket docket(Environment environment) {
   return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
      .groupName("hello") // 配置分组:hello分组
       
}

3、配置多个分组只需要配置多个docket即可:

@Bean
public Docket docket1(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group1");
}
@Bean
public Docket docket2(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group2");
}
@Bean
public Docket docket3(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group3");
}

常用注解

tars:相当于配了一个组

Swagger的所有注解定义在io.swagger.annotations包下

下面列一些经常用到的,未列举出来的可以另行查阅说明:

Swagger注解简单说明
@Api(tags = “xxx模块说明”)作用在模块类上
@ApiOperation(“xxx接口说明”)作用在接口方法上
@ApiModel(“xxxPOJO说明”)作用在模型类上
@ApiModelProperty(value = “xxx属性说明”,hidden = true)作用在类方法和属性上,hidden设置为true可以隐藏该属性
@ApiParam(“xxx参数说明”)作用在参数、方法和字段上,类似@ApiModelProperty
@ApiIgnore()用于类,方法,方法参数表示这个方法或者类被忽略
@ApiImplicitParams、@ApiImplicitParam方法的参数的说明;@ApiImplicitParams 用于指定单个参数的说明
@ApiResponses、@ApiResponse方法返回值的说明 ;@ApiResponses 用于指定单个参数的说明…
其中:@ApiOperation()
@ApiOperation()写在方法里用处
value用于方法描述
notes用于提示内容
tags可以重新分组(视情况而用)
@ApiParam() 用于方法,参数,字段说明
@ApiParam()用处
name参数名
value参数说明
required是否必填
@Api(value="用户控制器",tags={"用户操作接口"})
@RestController
@RequestMapping("/user")
public class UserController {


    @ApiOperation(value="获取所有用户",tags={"获取用户信息copy"},notes="注意问题点")
    @GetMapping("/getAll")
    public User user(@ApiParam(name="name",value="用户名") String name){
        return new User();
    }

我们也可以给请求的接口配置一些注释

    @ApiOperation("响应hello")
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
@ApiModel()用于实体类
ApiModel()作用
value表示对象名
description描述
@ApiModelProperty()用于方法,字段
@ApiModelProperty()作用
value字段说明
name重写属性名字
dataType重写属性类型
required是否必填
example举例说明
hiddenhidden–
实体配置:

1、新建一个实体类

@ApiModel(value="user",description="用户对象user")
public class User {

    @ApiModelProperty(value="用户名",name="username",example="admin")
    public String username;
    @ApiModelProperty(value="密码",name="password",required=true)
    public String password;

}

2、将实体类请求接口的返回值上,能映射到实体项中:

   @ApiOperation(value="获取所有用户",tags={"获取用户信息copy"},notes="注意问题点")
    @GetMapping("/getAll")
    public User user(@ApiParam(name="name",value="用户名") String name){
        return new User();
    }

在这里插入图片描述

注:并不是因为@ApiModel这个注解让实体显示在这里了,而是只要出现在接口方法的返回值上的实体都会显示在这里,而@ApiModel和@ApiModelProperty这两个注解只是为实体添加注释的。swagger-ui 自定义

@ApiImplicitParam 单个参数
@ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam
@ApiImplicitParams()用处
name参数名称
value参数说明
dataType数据类型
paramTyp参数类型
example举例说明
@ApiImplicitParams({
        @ApiImplicitParam(name = "username", value = "用户名", dataType = "string", paramType = "update", example = "admin"),
        @ApiImplicitParam(name = "id", value = "用户id", dataType = "long", paramType = "update"),
        @ApiImplicitParam(name = "email", value = "邮箱", dataType = "string", paramType = "update")
})
@PutMapping("/user")
public String update(String username, Integer id, String email) {

    return "success";
}
@ApiResponses、@ApiResponse方法返回对象的说明
@ApiResponse方法返回对象的说明
code相应码
message响应信息
response抛出的异常类.class

SwaggerUi定制:

1、默认的 访问 http://localhost:8080/swagger-ui.html

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

效果:在这里插入图片描述

2、bootstrap-uihttp://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>

效果:
在这里插入图片描述
3、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>

效果:
在这里插入图片描述
4、mg-ui 访问 http://localhost:8080/document.html

<!-- 引入swagger-ui-layer包 /document.html-->
<dependency>
   <groupId>com.zyplayer</groupId>
   <artifactId>swagger-mg-ui</artifactId>
   <version>1.0.6</version>
</dependency>

效果:
在这里插入图片描述

写在后边:

以上学习资料来自:swagger官网,b站狂神等。如有问题可以私信我

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值