3、swagger调试
阅读原文时间:2023年07月09日阅读:1

1、将项目中所有的接口展现在页面上,这样后端程序员就不需要专门为前端使用者编写专门的接口文档;

2、当接口更新之后,只需要修改代码中的Swagger描述就可以实时生成新的接口文档了,从而规避了接口文档老旧不能使用的问题;

3、通过Swagger页面,可以直接进行接口调用,降低了项目开发阶段的调试成本(在线测试)

1、添加swagger相关依赖:


io.springfox springfox-swagger2 2.8.0


io.springfox springfox-swagger-ui 2.8.0

2、Swagger的configuration配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean //配置docket以配置Swagger具体参数
public Docket docket(Environment environment) {

    //动态配置项目所属什么环境时来显示swagger  
    // 设置要显示swagger的环境  

// Profiles of = Profiles.of("dev", "test");

    // 判断当前是否处于该环境  
    // 通过enable()方法接收此参数判断是否要显示  

// boolean flag = environment.acceptsProfiles(of);

    return new Docket(DocumentationType.SWAGGER\_2)  
            //配置文档页面信息  
            .apiInfo(apiInfo())

            //动态配置是否启用Swagger,如果是false,在浏览器将无法访问  

// .enable(flag)

            //配置分组  
            //配置多个分组只需要配置多个docket即可,不同docket有不同组名  
            .groupName("组名")

            //构建Docket时通过select()方法扫描接口  
            .select()

            //RequestHandlerSelectors:配置要扫描接口的方式  
                //1、扫描所有,项目中的所有接口都会被扫描到:any()  
                //2、不扫描接口:none()  
                //3、扫描方法上的注解:withMethodAnnotation(),  
                        // 如withMethodAnnotation(GetMapping.class)只扫描get请求  
                //4、扫描类上的注解,参数是一个反射对象:withClassAnnotation(),  
                        // 如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口  
                //5、指定要扫描的包路径:basePackage(final String basePackage)  
            //例:.apis(RequestHandlerSelectors.basePackage("com.swagger.controller"))  
            .apis(RequestHandlerSelectors.basePackage("控制类所在包名"))

            //配置如何通过path过滤,即这里只扫描请求以/controller开头的接口  
                //1、任何请求都扫描:any()  
                //2、任何请求都不扫描:none()  
                //3、通过正则表达式控制:regex(final String pathRegex)  
                //4、通过ant()控制:ant(final String antPattern)  
            //例:.paths(PathSelectors.ant("/controller/\*\*"))  
            .paths(PathSelectors.ant("控制类中@RequestMapping中的路径"))  
            .build();  
}

//配置文档信息  
private ApiInfo apiInfo() {  
    Contact contact = new Contact("联系人名字", "http://xxx.xxx.com/联系人访问链接", "联系人邮箱");  
    return new ApiInfo(  
            "Swagger的学习笔记", // 标题  
            "如何配置Swagger", // 描述  
            "v1.0", // 版本  
            "http://terms.service.url/组织链接", // 组织链接  
            contact, // 联系人信息  
            "Apach 2.0 许可", // 许可  
            "许可链接", // 许可连接  
            new ArrayList<>()// 扩展  
    );  
}

//配置分组一  
@Bean  
public Docket docket1() {  
    return new Docket(DocumentationType.SWAGGER\_2).groupName("group1");  
}

//配置分组二  
@Bean  
public Docket docket2() {  
    return new Docket(DocumentationType.SWAGGER\_2).groupName("group2");  
}  

}

3、测试访问:

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

1、@Api详解:

用于标注一个Controller

属性

描述

value

url的路径值

tags

如果设置这个值、value的值会被覆盖

description

对api资源的描述

basePath

基本路径可以不配置

position

如果配置多个Api 想改变显示的顺序位置

produces

For example, "application/json, application/xml"

consumes

For example, "application/json, application/xml"

protocols

Possible values: http, https, ws, wss.

authorizations

高级特性认证时配置

hidden

配置为true 将在文档中隐藏

2、@ApiOperation详解:

用于对一个操作或HTTP方法进行描述

属性

描述

value

url的路径值

tags

如果设置这个值、value的值会被覆盖

description

对api资源的描述

basePath

基本路径可以不配置

position

如果配置多个Api 想改变显示的顺序位置

produces

For example, "application/json, application/xml"

consumes

For example, "application/json, application/xml"

protocols

Possible values: http, https, ws, wss.

authorizations

高级特性认证时配置

hidden

配置为true 将在文档中隐藏

response

返回的对象

responseContainer

这些对象是有效的 "List", "Set" or "Map".,其他无效

httpMethod

"GET","HEAD","POST","PUT","DELETE","OPTIONS"and"PATCH"

code

http的状态码 默认 200

extensions

扩展属性

3、@ApiParam详解:

用于请求方法中,定义api参数的注解

属性

描述

name

属性名称

value

属性值

defaultValue

默认属性值

allowableValues

可以不配置

required

是否属性必填

access

不过多描述

allowMultiple

默认为false

hidden

隐藏该属性

example

举例子

4、@ApiImplicitParams、@ApiImplicitParam详解:

(1)、@ApiImplicitParams:用在请求的方法上,包含一组参数说明

(2)、@ApiImplicitParam:对单个参数的说明

属性

描述

name

参数名

value

参数的说明、描述

required

参数是否必须必填

paramType

参数放在哪个地方

query --> 请求参数的获取:@RequestParam

header --> 请求参数的获取:@RequestHeader

path(用于restful接口)--> 请求参数的获取:@PathVariable

body(请求体)--> @RequestBody User user

form(普通表单提交)

dataType

参数类型,默认String,其它值dataType="Integer"

defaultValue

参数的默认值

5、@ApiModel、@ApiModelProperty详解:

(1)、@ApiModel:用于描述一个Model的信息

(2)、@ApiModelProperty:用来描述一个Model的属性。