Swagger UI 容许任何人(无论您是开发团队还是最终用户)都能够可视化 API 资源并与之交互,而无需任何实现逻辑。它是依据您的 OpenAPI(以前称为 Swagger)标准主动生成的,具备可视化文档,可简化后端实现和客户端应用。

为什么应用Swagger

  • 跨语言性,反对 40 多种语言,Swagger 曾经缓缓演变成了 OpenAPI 标准;
  • Swagger UI 出现进去的是一份可交互式的 API 文档,咱们能够间接在文档页面尝试 API 的调用,省去了筹备简单的调用参数的过程;
  • 对于某些没有前端界面 UI 的性能,能够用它来测试接口;
  • 联调不便,如果出问题,间接测试接口,实时查看参数和返回值,就能够疾速定位问题。

Swagger疾速开始

这里抉择 2.9.2 版本。

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

增加配置类

增加一个 Swagger 配置类,在工程下新建 config 包并增加一个 SwaggerConfig 配置类。SwaggerConfig.java

import com.google.common.collect.Lists;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.schema.ModelRef;
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;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

//作为Springfox框架的次要接口的构建器,提供正当的默认值和不便的配置办法。@Beanpublic Docket docket() {    ParameterBuilder builder = new ParameterBuilder();    builder.parameterType("header").name("token")            .description("token值")            .required(true)            .modelRef(new ModelRef("string")); // 在swagger里显示header    return new Docket(DocumentationType.SWAGGER_2)            .groupName("aitest_interface")            .apiInfo(apiInfo())            .globalOperationParameters(Lists.newArrayList(builder.build()))            .select().paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {    return new ApiInfoBuilder()            .title("aitest-mini零碎")            .description("aitest-mini接口文档")            .contact(new Contact("tlibn", "", "103@qq.com"))            .version("1.0")            .build();}

}

增加控制器

增加一个控制器,在工程下新建 controller包并增加一个Controller控制器,如果曾经存在Controller控制器,则间接启动服务也能够,如上章咱们编写了HogwartsTestUserController类,此时间接启动服务即可。

关上 swagger 接口文档界面

启动 Spring Boot 服务,关上浏览器,拜访:http://127.0.0.1:8081/swagger-ui.html,进入swagger接口文档界面。

测试

开展 hogwarts-test-user-controller 的任意接口,输出参数并点击执行,就能够看到接口测试后果了。


Swagger 罕用注解

swagger 通过注解表明该接口会生成文档,包含接口名、申请办法、参数、返回信息的等等。
Api:润饰整个类,形容 Controller 的作用

Api(tags = "霍格沃兹测试学院-用户治理模块", hidden = true)

ApiOperation:形容一个类的一个办法,或者说一个接口

ApiOperation("查问用户列表")

ApiParam:单个参数形容
ApiModel:用对象来接管参数

 ApiModel(value = "用户登录类", description = "申请类")

ApiProperty:用对象接管参数时,形容对象的一个字段

ApiModelProperty(value="用户id", example="1",required=true)

ApiResponse:HTTP 响应其中 1 个形容
ApiResponses:HTTP 响应整体形容
ApiIgnore:应用该注解疏忽这个 API
ApiError :产生谬误返回的信息
ApiImplicitParam:一个申请参数
ApiImplicitParams:多个申请参数
更多参见 https://github.com/swagger-ap...

增加 Swagger 罕用注解后的成果


增加 Swagger 罕用注解后的示例代码
HogwartsTestUserController.java

@Api(tags = "霍格沃兹测试学院-用户治理模块", hidden = true)@RestController@RequestMapping("/api/user")public class HogwartsTestUserController {    /**     * 查问用户列表,返回一个JSON数组     * */    @ApiOperation("查问用户列表")    @GetMapping("/users")    @ResponseStatus(HttpStatus.OK)    public Object getUsers(){        List<UserDto> list = getData();        return list;    }    /**     * 查问用户信息,返回一个新建的JSON对象     * */    @ApiOperation("查问用户信息")    @GetMapping("/users/{id}")    @ResponseStatus(HttpStatus.OK)    public Object getUser(@PathVariable("id") Long id){        if(Objects.isNull(id)){            return null;        }        List<UserDto> list= getData();        UserDto userDto = getUserDto(id, list);        return userDto;    }    /**     * 新增用户     * */    @ApiOperation("新增用户")    @PostMapping("/users")    @ResponseStatus(HttpStatus.CREATED)    public Object addUser(@RequestBody UserDto user){        List<UserDto> list= getData();        list.add(user);//模仿向列表中减少数据        return user;    }    /**     * 编辑用户     * */    @ApiOperation("编辑用户")    @PutMapping("/users/{id}")    @ResponseStatus(HttpStatus.CREATED)    public Object editUser(@PathVariable("id") Long id,@RequestBody UserDto user){        List<UserDto> list = getData();        for (UserDto userDto:list) {            if(id.equals(userDto.getId())){                userDto = user;                break;            }        }        return user;    }    /**     * 删除用户     * */    @ApiOperation("删除用户")    @DeleteMapping("/users/{id}")    @ResponseStatus(HttpStatus.NO_CONTENT)    public Object deleteUser(@PathVariable("id") Long id){        List<UserDto> list = getData();        UserDto userDto = getUserDto(id, list);        return  userDto;    }    /**     * 模仿数据     * */    private List<UserDto> getData(){        List<UserDto> list=new ArrayList<>();        UserDto userDto = new UserDto();        userDto.setId(1L);        userDto.setName("admin");        userDto.setPwd("admin");        list.add(userDto);        userDto = new UserDto();        userDto.setId(2L);        userDto.setName("HogwartsTest1");        userDto.setPwd("HogwartsTest1");        list.add(userDto);        userDto = new UserDto();        userDto.setId(3L);        userDto.setName("HogwartsTest2");        userDto.setPwd("HogwartsTest2");        list.add(userDto);        userDto = new UserDto();        userDto.setId(4L);        userDto.setName("HogwartsTest3");        userDto.setPwd("HogwartsTest3");        list.add(userDto);        return  list;    }    /**     *  模仿依据id查问列表中的数据     * @param id     * @param list     * @return     */    private UserDto getUserDto( Long id, List<UserDto> list) {        UserDto UserDto = null;        for (UserDto user : list) {            if (id.equals(user.getId())) {                UserDto = user;                break;            }        }        return UserDto;    }}

UserDto.java

 @ApiModel(value = "用户登录类", description = "申请类") public class UserDto {     @ApiModelProperty(value="用户id", example="1",required=true)     private Long id;     @ApiModelProperty(value="用户名称", example="hogwarts1",required=true)     private String name;     @ApiModelProperty(value="用户明码", example="hogwarts2",required=true)     private String pwd;     public Long getId() {         return id;     }     public void setId(Long id) {         this.id = id;     }     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     }     public String getPwd() {         return pwd;     }     public void setPwd(String pwd) {         this.pwd = pwd;     } }

Spring Boot 集成 Swagger就先讲到这里,大家能够照着代码,多练习一下哦~