SpringBoot集成swagger、yapi

别再手动维护YApi了!IDEA装上EasyYapi插件,SpringBoot接口文档自动同步(附完整配置流程) 本文介绍如何通过IDEA的EasyYapi插件实现SpringBoot接口文档自动同步到YApi,告别手动维护的繁琐流程。详细讲解插件安装、配置、代码注解优化及自动化工作流集成,帮助开发者提升团队协作效率,确保文档与代码实时同步。 阅读详情

一、如何使用

第一步,引入pom文件

        <!--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增强UI-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.5</version>
        </dependency>

第二步,编写swagger配置类

package com.tracy.swagger.config;

import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
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.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import javax.xml.ws.Response;
import java.util.ArrayList;
import java.util.List;

/**
 * @EnableSwaggerBootstrapUI   swagger页面优化 使用时账密验证
 * @EnableSwagger2  开启swagger
 * swagger.enable 项目动态启用swagger
 */
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")
public class SwaggerConfig {

    @Bean
    public Docket docket() {
        //可以通过此方式添加全局header
        ParameterBuilder parameterBuilder = new ParameterBuilder();
        List<Parameter> heads = new ArrayList<Parameter>();
        parameterBuilder.name("token")
                .description("访问令牌")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        heads.add(parameterBuilder.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .genericModelSubstitutes(Response.class)
                .forCodeGeneration(true)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.tracy.swagger.controller"))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(heads);
    }
    
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("API文档")
                .description("采用swagger2")
                .termsOfServiceUrl("")
                .version("1.0")
                .build();
    }
}

第三步,application.yml配置

server:
  port: 11111
swagger:
  enable: true  #项目是否开发swagger
  basic:
    enable: true #是否开启权限验证
    username: tracy #账号
    password: 123456 #密码

第四步,编写controller、entity、vo、bo

package com.tracy.swagger.controller;

import com.tracy.swagger.bo.UserBo;
import com.tracy.swagger.entity.User;
import com.tracy.swagger.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

@Slf4j
@RestController
@RequestMapping("/swagger")
@Api(tags ="swagger测试类")
public class SwaggerController {


    @GetMapping(value = "/getUser")
    @ApiOperation(value = "获取用户信息",notes = "根据用户id获取用户信息")
    @ApiImplicitParam(name = "id",value = "用户id",required = true,paramType = "query",dataType = "string")
    public Result<User> getUser(@RequestParam("id")Long id){
        User user = new User(1L,"swagger",18,false,new Date());
        Result<User> result = new Result<>(Result.SUCCESS_STATUS,"SUCCESS",user);
        return result;
    }

    @PostMapping(value = "/addUser")
    @ApiOperation(value = "新增用户",notes = "新增用户")
    public Result<User> addUser(@RequestBody UserBo userBo){
        User user = new User(1L,"swagger",18,false,new Date());
        Result<User> result = new Result<>(Result.SUCCESS_STATUS,"SUCCESS",user);
        return result;
    }

    @PostMapping(value = "/updateUser")
    @ApiOperation(value = "更新用户",notes = "更新用户")
    public Result<User> updateUser(@RequestBody UserBo userBo){
        User user = new User(1L,"swagger",18,false,new Date());
        Result<User> result = new Result<>(Result.SUCCESS_STATUS,"SUCCESS",user);
        return result;
    }

    @DeleteMapping(value = "/deleteUser")
    @ApiOperation(value = "删除用户",notes = "根据用户id删除用户")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id",value = "用户id",required = true,paramType = "query",dataType = "string"),
            @ApiImplicitParam(name = "authority",value = "用户权限",required = true,paramType = "header",dataType = "string")
    })
    public Result<Boolean> deleteUser(@RequestParam("id")Long id){
        Result<Boolean> result = new Result<>(Result.SUCCESS_STATUS,"SUCCESS",true);
        return result;
    }

}
package com.tracy.swagger.entity;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "用户",description = "用户对象模型")
public class User implements Serializable {

    private static final long serialVersionUID = 7497034210240490279L;

    @ApiModelProperty(name="id",value = "用户Id",dataType = "Long")
    private Long id;

    @ApiModelProperty(name="name",value = "用户名",dataType = "String")
    private String name;

    @ApiModelProperty(name="age",value = "年龄",dataType = "Integer")
    private Integer age;

    @ApiModelProperty(name="deleted",value = "是否删除",dataType = "Boolean")
    private Boolean deleted;

    @ApiModelProperty(name="birthday",value = "生日",dataType = "Date")
    private Date birthday;
}

 

package com.tracy.swagger.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "result",description = "返回值对象")
public class Result<T> implements Serializable {

    private static final long serialVersionUID = -3093856310515437414L;

    public static final int SUCCESS_STATUS = 200;

    public static final int FAILURE_STATUS = -1;

    @ApiModelProperty(name="code",value = "状态 200:成功 其余异常",dataType = "int")
    private int code = SUCCESS_STATUS;

    @ApiModelProperty(name="message",value = "错误信息",dataType = "String")
    private String message;

    @ApiModelProperty(name="data",value = "返回数据主体",dataType = "T")
    private T data;

}

 

package com.tracy.swagger.bo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "用户对象",description = "用户")
public class UserBo implements Serializable {

    @ApiModelProperty(name="id",value = "用户id,更新用户信息时必传",dataType = "Long")
    private Long id;

    @ApiModelProperty(name="name",value = "用户名",dataType = "String")
    private String name;

    @ApiModelProperty(name="age",value = "年龄",dataType = "Integer")
    private Integer age;

    @ApiModelProperty(name="deleted",value = "是否删除",dataType = "Boolean")
    private Boolean deleted;

    @ApiModelProperty(name="birthday",value = "生日",dataType = "Date")
    private Date birthday;
}

第五步,启动,展示效果

权限验证:

普通效果:http://127.0.0.1:11111/swagger-ui.html

增强UI效果:http://127.0.0.1:11111/doc.html

第六步,集成yapi

yapi测试环境地址:http://yapi.demo.qunar.com/

1.采用上传swagger的方式,转为yapi,swagger文件地址 http://127.0.0.1:11111/v2/api-docs

2.swagger数据导入

 

二、swagger主要注解使用

1.@Api作用在Controller类,类的描述

value	    	url的路径值
tags	    	如果设置这个值、value的值会被覆盖
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作用在Controller的方法,方法的描述

value				url的路径值
tags				如果设置这个值、value的值会被覆盖
description			对api资源的描述
basePath			基本路径可以不配置
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.@ApiImplicitParams、@ApiImplicitParam作用在Controller的方法上,参数的描述

name            参数名
value           参数名描述
paramType		参数类型 path-> /user/{id}  query->/user?id=1 body->RequestBody header->请求头  form->表单提交
dataType        参数数据类型 string int long
required        是否必要 默认false
defaultValue    参数的默认值

三、参考文档

swagger-bootstrap-ui文档地址:https://doc.xiaominfo.com/

代码地址:https://gitee.com/jiaobai/swagger

【IDEA】SpringBoot使用EasyYapi对代码实现API接口一键发布到YApi EasyYapi是什么?官网的介绍。EasyYapi是一款Idea插件,帮你导出API到YApi、postman、markdown。EasyYapi特色EasyYapi优势(1)基于javadoc&KDoc&ScalaDoc解析API文档(2)你可以在保持代码零侵入的情况下得到相当完整的api文档, 但是特殊的需求还是需要部分特殊的注释/注解配合(3)与之相对的是, 你可以灵活的运用配置规则来适应你的项目特性以减少代码侵入. 阅读详情

相关推荐

YapiIdeaUploadPlugin:yapi idea 上传插件,快速生成文档

目的 减少yapi 录入时间,通过工具反向规范代码注释,和代码整洁 下载地址 1: 2:idea 插件库 更新速度 github>idea 插件库 支持语言 java,spring 单个&批量 单个上传选中方法名称 批量上传选中类名 支持接口 目前 dubbo 接口/api 支持yapi 的版本 1.5.0+ 支持idea 版本 2017+ 使用方式 查看 感谢 感谢以下同学提交的代码(排名不分先后) @24kpure @sun7132568 @zouzou6321 @zhanyao @Planeswalker23

springboot 整合 swagger2.x,并导入到YApi

主要介绍 1.sprigboot配置swagger 2.swagger2的常用注解使用 3.swagger2接口文档导入到YApi

Ych的博客 2109

Truncated SVD for faster dection

Truncated SVD方法最先被提出在《Fast R-CNN》论文中,用于降低全连接层的运算量,提升模型的速度。在卷积神经网络的分类任务中,FC层的运算速度远远大于CONV层,而在Fast R-CNN的目标检测任务中,大多数的运算时间发生在FC 的运算中,是因为针对每张输入图片,只进行一次卷积操作,而要对生成的Region Proposal,大致两千个,进行全连接操作进行分类与Bounding...

weixin_35747666的博客 1535

【自动生成接口文档】Springboot集成Swagger2并通过Yapi做接口管理

Springboot集成Swagger2并通过Yapi做接口管理

不是很懂 2万+

QMT量化交易桥接方案深度对比:从MiniQMT淘汰说起

量化交易系统中的API桥接,本质是解决本地终端与底层交易引擎之间的通信瓶颈。其核心原理在于绕过GUI封装、直连确定性执行层,从而获得低延迟、高可靠、可监控的指令通路。技术价值体现在策略实盘一致性提升、毫秒级响应保障及运维可控性增强。典型应用场景包括打板策略、T+0套利、高频网格等对时效与稳定性双敏感的自动化交易。本文聚焦国金证券QMT专业版生态,系统剖析DLL注入、HTTP反向代理、IPC共享内存与官方HTTP API四大桥接路径的性能边界、合规风险与工程落地成本,尤其深入解析qmt终端 client is

weixin_33892359的博客 457

大疆机场及无人机上云(航线规划、指令飞行...)

最近基于大疆上云api进行二次开发,后面将按照开发步骤对其进行说明!

资深三维GIS开发 5574

SpringBoot接口文档生成插件:EasyYapi(支持yapi、Markdown、Postman)

(也可以在controller层直接返回data,通过全局数据处理封装code和msg)。在Controller类或Controller类方法上右键 -> Export Yapi。遵循JavaDoc规范(其实就是开发过程中把字段注释和方法注释写好)。在项目根目录创建文件:.easy.api.config。其他更多配置参考官方文档。以下是导出文档的示例。

木杨的博客 1992

工业焊缝缺陷检测实战:我用PatchCore在自建数据集上踩过的那些坑

本文详细介绍了PatchCore算法在工业焊缝缺陷检测中的实战应用,包括数据准备、模型调参和阈值优化等关键环节。通过分析焊缝图像的特殊性和anomaly detection技术的优化策略,分享了在自建数据集上提升检测精度的实用经验,为工业质检领域提供有价值的参考方案。

weixin_42624889的博客 397

Spring Boot 1.5.8集成Swagger2 + YApi —— 集成Swagger2

前后端项目分离之后,前端和后端的项目开始由不同的成员来进行开发。为了减少成员之间的沟通成本,一个好的Api文档就变得尤为重要。 如果Api文档完全由后端开发成员手动编辑和发布,随着开发的推进,接口变得原来越多,及时地更新和发布文档的工作将变得极其的复杂和占用时间,不利于项目的进展。 Swagger的产生就解决了如上的问题,集成Swagger后,后端开发成员只需要编写少量的注释即可在线生成清晰明朗的...

huzhenv5的博客 2524

机器人强化学习入门学习笔记

如果你追求高精度动力学仿真、用于强化学习或机器人研究,MuJoCo 是一个非常优秀的选择。如果需要快速实验、使用真实机器人模型,PyBullet 或 Gazebo可能更合适;如果你追求大规模并行训练,Isaac Gym 或 BraX会更高效。legged gym底层是​编辑isaacgym,基于gpu训练可以多环境并行训练,收敛到一个稳定行走的策略快。本视频MuJoCo基于cpu训练很慢。

xiaomu_347的博客 1459

提升ARM Cortex-M系统性能的关键技术:TCM技术解析与实战指南

TCM技术为ARM Cortex-M处理器提供了宝贵的确定性性能提升手段,特别适合对时序敏感的实时应用。通过合理配置和优化,工程师可以显著提高系统性能、降低中断响应时间并优化功耗。随着嵌入式系统对实时性要求的不断提高,TCM技术将在工业控制、汽车电子、医疗设备等领域发挥更加重要的作用。未来,ARM处理器可能会进一步扩展TCM容量并优化其与其他内存子系统的协同工作方式,为开发者提供更强大的实时性能保障。

1680

Spring Boot 1.5.8集成Swagger2 + YApi —— Swagger常用注解说明

常用注解汇总: @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置" @ApiIgnore:用在请求的类或者方法上,表示这个类后者方法被忽略 @ApiOperation:用在请求的方法上,说明方法的用途、作用 value="说明方法的用途、作用" ...

huzhenv5的博客 1865

【RT-DETR实战】RT-DETR实战手记(200):端侧实时目标检测,下一步往哪儿走?

昨天深夜调一个模型部署,在树莓派4B上跑RT-DETR-nano,帧率死活卡在8FPS上不去。量化也做了,算子也优化了,内存对齐也检查了,可就是离实时检测的底线还差一截。盯着终端里跳动的数字,突然意识到——我们可能正在接近当前技术路径的瓶颈。端侧实时目标检测的下一个突破口,恐怕不在现有框架的修修补补里。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 186

Spring Boot 1.5.8集成Swagger2 + YApi —— 部署安装YApi(在线安装)

YApi官方提供了两种内网部署YApi的方法,一种是可视化部署,另外一种是命令行部署 官方说明文档: https://hellosean1025.github.io/yapi/devops/index.html nginx配置 如果您是将服务器代理到 nginx 服务器,请配置 nginx 支持 websocket: 在location /添加 proxy_http_version 1.1; p...

huzhenv5的博客 2693

ArcGIS Pro 3.4 二次开发 - 知识图谱

本文介绍了在ArcGIS Pro SDK 3.4和.NET 8环境下操作知识图谱的方法。主要包含两大功能模块:1) 知识图谱数据存储操作,包括建立连接、获取图层、检索要素类与表定义、ID转换等;2) 知识图谱数据模型管理,如获取数据模型属性、标识符信息等。代码示例详细展示了如何使用C#通过QueuedTask异步任务与知识图谱服务交互,包括异常处理、数据转换等常见操作场景。所有示例均采用using语句确保资源释放,并遵循ArcGIS Pro SDK的最佳实践。

Winemonk 763

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring Boot 1.5.8集成Swagger2 + YApi —— 部署安装YApi(离线安装)

nginx配置 如果您是将服务器代理到 nginx 服务器,请配置 nginx 支持 websocket: 在location /添加 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection “upgrade”; 环境要求 nodejs(7.6+) mongodb...

huzhenv5的博客 1040

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【自动生成接口文档】Springboot集成OpenAPI-Swagger3并通过Yapi做接口管理

Springboot集成OpenAPI-Swagger3并通过Yapi做接口管理

不是很懂 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【自动生成接口文档】Springboot集成springFox-Swagger3并通过Yapi做接口管理

Springboot集成springFox-Swagger3并通过Yapi做接口管理

不是很懂 2万+

Spring Boot 1.5.8集成Swagger2 + YApi —— Swagger接口信息导入YApi

现在swagger的接口已经生成好,YApi也已经部署好了,如何将swagger的接口信息导入到YApi,本文将介绍两种导入的方式: 导入接口信息首先要知道导入接口信息的时候的接口数据同步方式,一共有三种同步方式,后面会用到: 普通模式(normal):不导入已存在的接口; 智能合并(good):已存在的接口,将合并返回数据的 response,适用于导入了 swagger 数据,保留对数据结...

huzhenv5的博客 3454

swagger2、rap2与YAPI

一个介绍rap和swagger的网站

越自律越自由 3669

Spring Boot集成Swagger导入YApi@无界编程

接口APi开发现状 现在开发接口都要在类似YApi上写文档,这样方便不同的团队之间协作,同步更新接口,提高效率。 但是如果接口很多,你一个个手工在YApi去录入无疑效率很低。 如果是使用Spring Boot集成Swagger可以直接导入YApi非常方便,不过还有一些需要注意的事项。 1.Spring Boot集成Swagger 添加swagger相关的maven依赖 <...

深度Java 3765

Spring Boot 1.5.8集成Swagger2 + YApi —— 部署安装mongoDB

笔者环境: OS:Windows10 x64 安装的mongoDB版本: 4.2.3 由于笔者需要在本地部署YApi,而部署YApi的前置条件就是需要安装有mongoDB,所以本篇文章将详细介绍如何在Windows环境下部署安装mongoDB。其它系统安装mongoDB的步骤大同小异,都需要去官网下载对应系统的安装包。如下开始安装步骤: 一、下载对应系统安装包 下载链接:https://www...

huzhenv5的博客 552

Swagger+YApi

在工作时,编写玩代码以后,我们还要写一个接口文档,提供给前端或者需要调用这个接口的人看,但是手写文档实在是太费事了,所以就出现了Swgger框架,可以实现调用restFul风格的web服务,自动生成接口文档,还可以在线测试接口 原生的Swager被国人集成到了Spring Boot红中了,所以只需导入启动Swagger依赖第一步: 第二步: 在配置文件中配置wagger 然后启动就行,这里也看到了有一个 base-package: com.itcast.swagger.controller

hnhroot的博客 1748

SpringBoot API接口文档Swagger

步骤1:引入依赖-- 引入 Swagger 依赖 --> < dependency > < groupId > io.springfox < artifactId > springfox-swagger2 < version > 2.9.2

Happy_lifer的博客 1104

Swagger 整合 Spring Boot

title: Swagger 整合 Spring Boot date: 2021-10-1 tags:Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。:用在类上,说明该类的作用。:注解来给API增加方法说明。 : 用在方法上包含一组参数说明。:用来注解来给方法入参增加说明。参数::用于表示一组响应:用在 @ApiRe

qq_44128703的博客 823

YDoc一款低侵入性、简洁并同时支持原生Swagger和YApi的文档生成器

点个star行不行。

分享技术,记录问题,努力学习 1164
上一篇: mybatis-plus
Tracyclock
博客等级 码龄10年 14粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值