首页 > 其他分享 >手把手带你上手swagger3

手把手带你上手swagger3

时间:2024-01-24 10:14:00浏览次数:27  
标签:AjaxResult return 手把手 value swagger3 注解 message public

配置POM

只需要加一个依赖,并且要注意,swagger3在springboot2.5版本以上会出现问题

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

如果高于2.5版本会报错:

org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

解决方法是降低spring的版本到2.5.x以下,或者是降低swagger版本到3以下,或者是在SwaggerConfig注解上标注@EnableWebMvc

配置例子

配置SwaggerConfig

@Configuration
@EnableSwagger2
@Slf4j
@EnableWebMvc
public class SwaggerConfig {

    @Bean
    public Docket docket(Environment environment) {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo()) // 文档基础配置
                .select()
                .paths(PathSelectors.regex("(?!/error.*).*"))  //加这行去除掉basic error controller接口
                .build();

    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("xx平台接口文档")
                .build();
    }

}

配置实体类

@ApiModel(value = "UsersDTO", description = "UsersDTO实体类")
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserDTO {

    @ApiModelProperty(value = "First name", example = "Jean")
    private String firstname;

    @ApiModelProperty(value = "Last name", example = "ab")
    private String lastname;

    @ApiModelProperty(value = "CardInfo")
    private CardInfo cardInfo;

}

可以看到这个类存在CardInfo嵌套类,对嵌套类的配置同上:

@ApiModel(value = "CardInfo", description = "CardInfo实体类")
@Data
public class CardInfo {

    @ApiModelProperty(value = "cardName", example = "card")
    String cardName;
}

注意:实体类的字段都需要有get方法,不然会失效,这里统一使用lombok的@Data解决

配置Controller类

@RestController
@Api(tags = "用户管理接口")
@RequestMapping("/users")
public class UsersController {

    @Autowired
    private UsersService usersService;

    @ApiOperation(value = "用户注册",notes = "传入用户信息进行注册")
    @PostMapping(value = "/register")
    public AjaxResult<Users> register(@RequestBody Users users) throws IOException {
        usersService.save(users);
        return AjaxResult.success(users);
    }

}

这里面的返回值AjaxResult需要定义好泛型,在返回值初定义类型

AjaxResult类

@ApiModel("API通用返回数据")
@Data
public class AjaxResult<T> {

    @ApiModelProperty(value = "状态码", example = "200")
    private final int code;

    @ApiModelProperty(value = "返回消息", example = "success")
    private final String message;

    @ApiModelProperty("数据对象")
    private final T data;

    public AjaxResult(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public T getData() {
        return data;
    }

    public static <T> AjaxResult<T> success() {
        return new AjaxResult<>(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMessage(), null);
    }

    public static <T> AjaxResult<T> success(String message) {
        return new AjaxResult<>(ResultCodeEnum.SUCCESS.getCode(), message, null);
    }

    public static <T> AjaxResult<T> success(T data) {
        return new AjaxResult<>(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMessage(), data);
    }

    public static <T> AjaxResult<T> success(String message, T data) {
        return new AjaxResult<>(ResultCodeEnum.SUCCESS.getCode(), message, data);
    }

    public static <T> AjaxResult<T> failed() {
        return new AjaxResult<>(ResultCodeEnum.FAILED.getCode(), ResultCodeEnum.FAILED.getMessage(), null);
    }

    public static <T> AjaxResult<T> failed(String message) {
        return new AjaxResult<>(ResultCodeEnum.FAILED.getCode(), message, null);
    }

    public static <T> AjaxResult<T> failed(ResultCodeEnum resultCodeEnum) {
        return new AjaxResult<>(resultCodeEnum.getCode(), resultCodeEnum.getMessage(), null);
    }

    public static <T> AjaxResult<T> failed(String message, T data) {
        return new AjaxResult<>(ResultCodeEnum.FAILED.getCode(), message, data);
    }

    public static <T> AjaxResult<T> failed(ResultCodeEnum resultCodeEnum, T data) {
        return new AjaxResult<>(resultCodeEnum.getCode(), resultCodeEnum.getMessage(), data);
    }
}

效果

image-20240123200557956

swagger有关的常用注解

  1. @Api 注解

    @Api 注解用于描述整个 API,通常放在控制器类上,一般使用tags注解就可以

    @Api(tags = "User API")
    @RestController
    @RequestMapping("/api/users")
    public class UserController {
        // ...
    }
    
  2. @ApiOperation 注解

    @ApiOperation 注解用于描述具体的 API 操作,通常放在控制器方法上

    @ApiOperation(
        value = "Get user by ID",
        notes = "Get user details by providing user ID"
    )
    @GetMapping("/{userId}")
    public ResponseEntity<User> getUserById(@PathVariable Long userId) {
        // Implementation to get user by ID
    }
    
  3. @ApiParam 注解

    @ApiParam 注解用于描述方法参数,提供参数的名称、描述等信息。

    @GetMapping("/{userId}")
    public ResponseEntity<User> getUserById(
        @ApiParam(name = "userId", value = "ID of the user", required = true)
        @PathVariable Long userId) {
        // Implementation to get user by ID
    }
    
  4. @ApiResponse@ApiResponses 注解

    这两个注解用于描述操作的响应信息,作用在方法上。

    @ApiResponses({
        @ApiResponse(code = 200, message = "Successful operation", response = String.class),
        @ApiResponse(code = 404, message = "User not found", response = String.class),
    })
    @GetMapping("/{userId}")
    public ResponseEntity<User> getUserById(@PathVariable Long userId) {
        // Implementation to get user by ID
    }
    
  5. @ApiModel@ApiModelProperty 注解

    这两个注解用于描述数据模型,通常放在实体类上。其中,下述的example可以实现在swagger页面调接口的默认值,并且如果导入到如eolink这种api管理工具,这个默认值也会填充进去。

    @ApiModel(description = "User information")
    public class User {
        @ApiModelProperty(value = "User ID", example = "ab")
        private Long id;
    
        @ApiModelProperty(value = "User name", example = "cd")
        private String name;
    
        // Getters and setters
    }
    
  6. @ApiIgnore 注解

    @ApiIgnore 注解用于标记不想在 Swagger 文档中显示的类、方法。

    @ApiIgnore
    public class IgnoredController {
        // ...
    }
    

    上述的 IgnoredController 类及其所有方法将被忽略。

  7. @ApiParamImplicit 注解

    @ApiParamImplicit 注解用于表示参数,需要被包含在注解@ApiImplicitParams之内。

    @ApiImplicitParams({
        @ApiImplicitParam(name = "userId", value = "ID of the user", required = true, dataType = "long", paramType = "path"),
    })
    @GetMapping("/{userId}")
    public ResponseEntity<User> getUserById(
        @PathVariable Long userId) {
        // Implementation to get user by ID
    }
    

导出json格式的swagger文档

点击主页这个地方

image-20240123202246160

按F12,在源代码里面的v2-api-docs里面右键另存为

image-20240123202423948

输入名称和后缀进行保存

image-20240123202516635

导入eolink

点api向下的箭头,再选swagger

image-20240123202614038

导入成功后可以看到,传参和返回值都能被正确识别和导入,包括传参的默认值也有

image-20240123203040508

标签:AjaxResult,return,手把手,value,swagger3,注解,message,public
From: https://www.cnblogs.com/scottyzh/p/17983987

相关文章

  • 怎么他们都有开源项目经历|手把手教你参与开源
    一、前言大家好,这里是白泽。有一些同学提问,希望在自己的简历上增加一些有含金量的项目经历,最好能够去参与一些开源项目的开发,但由于对一个庞大的开源项目缺乏认知,难以着手。同时也担心自己能力不足,不知道自己写的代码是否会被接纳。这里我总结了遇到的一些问题:如何找到适合我......
  • 手把手教你怎么搭建属于自己的服务器(保姆级教程)
    最近总是想搭建自己的网站,奈何皮夹里空空如也,服务器也租不起,更别说域名了。于是我就寻思能否自己搭建个服务器,还不要钱呢?还真行!!!有两个免费的建站工具:Apache和Nginx由于两个工具建站方法差不多,所以我就以Nginx为例1.安装Nginx首先前往Nginx官网(nginx.org[1])进行下载,也可以......
  • 手把手教学——OpenWrt新机的固件编译/定制
    手把手教学——OpenWrt新机的固件编译/定制目录手把手教学——OpenWrt新机的固件编译/定制背景硬件参数软件修改新增profile设备树内存Flash/分区表无线接口有线接口刷机问题修复背景手里有一台QCA的IPQ4019的路由器,为TP-Link的DecoM9Plus2.0。查了下OpenWrt已经支持这个CP......
  • 手把手教你MongoDB 数据库连接URL 格式、authSource参数
    快速了解MongoDB官方文档MongoDB是一个文档数据库MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成使用URL连接MongoDB数据库标准URI连接语法:mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]......
  • 03-集群搭建:手把手教你玩转 Kubernete 集群搭建
    通过上一节课的学习,我们已经对Kubernetes的架构有了清楚的认识。但是到现在还没有和Kubernetes集群真正打过交道,所以你可能有一种“不识庐山真面目”的云里雾里的感觉。那么本节课,我们就来学习如何搭建Kubernetes集群,开启探索Kubernetes的第一站。在线Kubernetes集群......
  • springboot集成swagger knife4j 最详细的步骤 手把手教你继承swagger
    springboot集成swaggerknife4j最详细的步骤手把手教你继承swagger效果图Knife4j介绍Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目一开始项目初衷是为了写一个增强版本的swagger的前端ui,但是随着项目的发展,面对越来越多的个性......
  • 手把手让你学会从压测到指标分析
    介绍wrk是一种使用Lua编写的HTTP压力测试工具,它是一个轻量级的开源工具,适用于测试Web服务器和Web应用程序的性能。以下是对wrk工具的特点、易用性、文档和社区支持等因素的简要介绍:特点:高性能:wrk使用多线程和事件驱动的I/O模型,可以获得很高的吞吐量。灵活性:wrk具有......
  • 手把手教你用 Python 去除图片和 PDF 水印
    我们在平时的学习,工作和写作中,有时会遇到一些需要将图片的水印去除的场景。虽然网络上有很多免费或者付费的软件可以帮助我们去除图片水印,但作为程序员,我们完全可以自己动手编程实现。原理分析假设我们需要将下面这张图片里的水印,使用Python代码去除。图像是由像素组成的,每......
  • Goland 2023.3.2最新安装激活教程,手把手带你激活Goland,永久有效!
    大家好,欢迎来到程序视点!我是小二哥。前言作为一个go语言程序员,觉得自己有义务为go新手开一条更简单便捷的上手之路。纵使网上教程很多,但总不尽人意。go的入门门槛还是非常低的,无论是安装还是使用。俗话说“工欲善其事必先利其器”,作为Go语言编程开发者,最锋利的编程工具非Gola......
  • Vue开发者必备!手把手教你实现类似Element Plus的全局提示组件!
    前言在Web开发中,用户体验至关重要。有效的信息提示和错误消息对于确保用户更好地理解和操作至关重要。在这个背景下,全局弹框提示组件成为了一个非常有用的工具。Vue.js,作为当前最受欢迎的前端框架之一,为创建灵活、可复用的弹框组件提供了强大的支持。本文将介绍一个简单而强大的全......