代码音符

使用swagger3自动生成与前端对接的Api文档(一)初步生成文档(连载中)

创建时间: 2020-12-4 19:17

修改时间: 2023-6-26 18:06

浏览: 304

使用语言:JAVA

使用框架:SpringBoot

构建工具:maven

使用插件:lombok

首先,需要使用maven在我们的springboot项目中导入swagger的starter包:

在pom.xml加入如下配置:

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

然后,我们需要创建一个配置类:

import io.swagger.annotations.Api;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
public class Swagger3Config {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .enable(true)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("文档测试")
                .description("这是一个文档测试")
                .contact(new Contact("cuijian", "#", "cuijian.1997@qq.com"))
                .version("v1.0")
                .build();
    }

}

然后,我们需要创建一个Controller,用来展示接口数据:

import com.xx.api.annotation.LoginRequired;
import com.xx.api.common.JsonResult;
import com.xx.api.service.ImageService;
import com.xx.api.vo.common.FileVo;
import io.swagger.annotations.*;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List;

@Api(value = "图片头像相关接口", tags = {"图片头像相关接口"})
@RestController
@RequestMapping("/image")
@Validated
public class ImageController {

    /**
     * 上传头像
     * @param fileVo 头像文件
     * @return 图像地址
     */
    @ApiOperation("上传头像,限制大小:10M以内,图片会被压缩为300* 300")
    @ApiResponses({
            @ApiResponse(code = 200, message = "上传成功,返回图片地址", response = JsonResult.class),
            @ApiResponse(code = 410, message = "你需要登录来访问资源", response = JsonResult.class),
            @ApiResponse(code = 480, message = "上传文件错误,请检查后上传", response = JsonResult.class)
    })
    @LoginRequired
    @PostMapping(value = "/uploadProfile.muse")
    public JsonResult<String> uploadProfile(@RequestBody FileVo fileVo) {
        return JsonResult.success();
    }
}
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

@Data
public class FileVo {

    @Schema(description = "Multipart格式的图片", required = true)
    private MultipartFile file;

}
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;

@Data
@ToString
public class JsonResult<T> implements Serializable {

    private int status = 200;

    private String msg;

    private T data;

    private JsonResult(){}

    private JsonResult(String msg){
        this.msg = msg;
    }
    private JsonResult(T data) {
        this.data = data;
    }
    private JsonResult(int status, String msg) {
        this.status = status;
        this.msg = msg;
    }
    private JsonResult(String msg, T data) {
        this.msg = msg;
        this.data = data;
    }
    private JsonResult(int status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }
    public static <T> JsonResult<T> success(){
        return new JsonResult<>("success!");
    }
    public static <T> JsonResult<T> success(T data) {
        return new JsonResult<>("success!", data);
    }
    public static <T> JsonResult<T> success(String msg, T data) {
        return new JsonResult<>(msg, data);
    }
    public static <T> JsonResult<T> error(ResultCode resultCode) {
        return new JsonResult<>(resultCode.getCode(), resultCode.getMessage());
    }
    public static <T> JsonResult<T> error(ResultCode resultCode, Exception e) {
        return new JsonResult<>(resultCode.getCode(), resultCode.getMessage() + e.getMessage());
    }
    public static <T> JsonResult<T> error(ResultCode resultCode, T data) {
        return new JsonResult<>(resultCode.getCode(), resultCode.getMessage(), data);
    }
}

然后,运行项目,打开地址:http://${你的地址}:${你的端口}/swagger-ui/index.html

文档就生效了,接下来,我还会补充一些文档的细节部分,因为目前大多数使用的还是swagger2,导致swagger3的指导并不多,我也是被一些其他的博客文章误导,走了很多弯路,我会把我曾经遇到的问题都记录下来,争取让后面的人不会在编写文档上浪费大量的时间。

创建时间: 2020-12-4 19:17

修改时间: 2023-6-26 18:06

浏览: 304

*本文遵循 CC BY-NC-SA 许可协议。转载请注明出处!