Spring Boot整合swagger2

在上一篇中我们围绕了Spring Boot 集成了RESTful API项目,但是我们在实际开发中,我们的一个RESTful API有可能就要服务多个不同的开发人员或者开发团队,包括不限于PC,安卓,IOS,甚至现在的鸿蒙OS,web开发等等。为了减少与其他团队平时开发期间的频繁沟通成本,我们一般会选择创建一个相关的文档来记录所有的接口细节,也就是我们常常在实际开发中的接口文档。

  • 但是我们采用接口文档进行记录的时候,发现,由于接口众多,并且他们的细节比较复杂,需要我们考虑不同场景的HTTP请求,甚至HTTP的相关头部信息,内容等,并且我们在创建这样的接口文档的时候,费时费力,很多的时候,我们都统计不全,甚至还会出现错误,这是因为人力统计的时候很容易出现差错,这也很正常。
  • 并且随着时间的增加,我们对系统进行改动,不免也会对相关接口进行改动,这个只要是做过开发的都知道,这里调接口,那里调接口,我们就需要对文档进行修改,但是我们在开发过程中,发现代码和文档处于两个阶级,除非老大有严格的管控,不然就会造成很多问题。

这个时候,我们发现刚好有一种技术可以解决我们的问题,也就是Swagger2,他可以轻松的整合到Spring Boot中,并于Spring MVC 程序配合组织处很强大哦的RESTful API文档,极大的减少了我们创建文档的工作量,同时进一步将内容整合到我们的实现代码中,让代码修改和文档维护成为一体,同时修改,同时记录,让我们在修改代码的同时也修改了文档说明。

此外Swagger2 提供了强大的页面测试功能来调试每个RESTful API。具体效果如下图所示。
Spring Boot整合swagger2_第1张图片

准备工作

我们需要有一个Spring Boot 实现的RESTful API工程,我们在上一篇就以及涉及到了,如果你没有接触过RESTful API,欢迎参照上一篇一起食用更佳。

Spring Boot整合Swagger 2

第一步,添加依赖,老样子,这里就不在详细描述了,如下:

<dependencies>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>

    
    <dependency>
        <groupId>io.springfoxgroupId>
        <artifactId>springfox-swagger2artifactId>
        <version>2.9.2version> 
    dependency>

    
    <dependency>
        <groupId>io.springfoxgroupId>
        <artifactId>springfox-swagger-uiartifactId>
        <version>2.9.2version> 
    dependency>
dependencies>

第二步:在Spring Boot的启动类中添加一个@EnableSwagger2Doc 注解,如下:

@EnableSwagger2Doc
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

第三步创建一个User实体对象,并给相关实体添加Swagger2 自带的接口,@ApiModel添加到实体类上,@ApiModelProperty添加到具体的属性之上,用于描述具体属性

@ApiModel(description="用户实体")
public class User {

    @ApiModelProperty("用户编号")
    private Long id;
    @ApiModelProperty("用户姓名")
    private String name;
    @ApiModelProperty("用户年龄")
    private Integer age;

    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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

第四步,我们在application.properties文件上配置有关Swagger2的相关属性。

swagger.title=spring-boot-starter-swagger
swagger.description=Starter for swagger 2.x
swagger.version=1.9.0.RELEASE
swagger.license=Apache License, Version 2.0
swagger.licenseUrl=https://www.apache.org/licenses/LICENSE-2.0.html
swagger.termsOfServiceUrl=https://github.com/dyc87112/spring-boot-starter-swagger
swagger.contact.name=miaow
swagger.contact.url=https://luoxiaohei520.github.io
[email protected]
swagger.base-package=com.miaow
swagger.base-path=/**

其中参数的相关含义如下:

swagger.title:标题
swagger.description:描述
swagger.version:版本
swagger.license:许可证
swagger.licenseUrl:许可证URL
swagger.termsOfServiceUrl:服务条款URL
swagger.contact.name:维护人
swagger.contact.url:维护人URL
swagger.contact.email:维护人email
swagger.base-package:swagger扫描的基础包,默认:全扫描
swagger.base-path:需要处理的基础URL规则,默认:/**

更多配置请参照官方文档

此时启动项目,访问链接: http://localhost:8080/swagger-ui.html
发现页面全是英文的。

第五步,我们来对Controller层的相关对象和方法进行API注解说明,在第四步我们发现通过浏览器访问,整个界面都是英文或者遵循代码定义的名称产生的,对用户并不友好,于是我们通过相关注解来给API增加说明:@Api@ApiOperation注解来给API增加说明、通过@ApiImplicitParam@ApiModel@ApiModelProperty注解来给参数增加说明。

@Api(tags = "用户管理")
@RestController
@RequestMapping(value = "/users")     // 通过这里配置使下面的映射都在/users下
public class UserController {

    // 创建线程安全的Map,模拟users信息的存储
    static Map<Long, User> users = Collections.synchronizedMap(new HashMap<>());

    @GetMapping("/")
    @ApiOperation(value = "获取用户列表")
    public List<User> getUserList() {
        List<User> r = new ArrayList<>(users.values());
        return r;
    }

    @PostMapping("/")
    @ApiOperation(value = "创建用户", notes = "根据User对象创建用户")
    public String postUser(@RequestBody User user) {
        users.put(user.getId(), user);
        return "success";
    }

    @GetMapping("/{id}")
    @ApiOperation(value = "获取用户详细信息", notes = "根据url的id来获取用户详细信息")
    public User getUser(@PathVariable Long id) {
        return users.get(id);
    }

    @PutMapping("/{id}")
    @ApiImplicitParam(paramType = "path", dataType = "Long", name = "id", value = "用户编号", required = true, example = "1")
    @ApiOperation(value = "更新用户详细信息", notes = "根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
    public String putUser(@PathVariable Long id, @RequestBody User user) {
        User u = users.get(id);
        u.setName(user.getName());
        u.setAge(user.getAge());
        users.put(id, u);
        return "success";
    }

    @DeleteMapping("/{id}")
    @ApiOperation(value = "删除用户", notes = "根据url的id来指定删除对象")
    public String deleteUser(@PathVariable Long id) {
        users.remove(id);
        return "success";
    }
}

之后再通过:http://localhost:8080/swagger-ui.html 访问,点击相关信息,可以看到具体的参数和相关属性。
还可以相关提示进行测试:
Spring Boot整合swagger2_第2张图片
Spring Boot整合swagger2_第3张图片
Spring Boot整合swagger2_第4张图片

在上图请求的页面中,我们看到user的Value是个输入框,是的,Swagger除了查看接口功能外,还提供了调试测试功能,我们可以点击上图中右侧的Model Schema(黄色区域:它指明了User的数据结构),此时Value中就有了user对象的模板,我们只需要稍适修改,点击下方“Try it out!”按钮,即可完成了一次请求调用!

此时,你也可以通过几个GET请求来验证之前的POST请求是否正确。

你可能感兴趣的:(#,Spring,1024程序员节,spring,boot)