自定义SpringBoot+Swagger中@ApiModel默认名称

@ApiModel Swagger 前后端分离后端时代:前端值用管理静态页面;html==>后端。模板引擎jsp==>后端是主力Swagger自动生成API文档 ,就是用来测试接口的前后端分离时代:后端:后端控制层,服务层,数据访问层【后端团队】后端写完接口,前端去调用,给前端一个路径(接口名)前端:前端控制层,视图层【前端团队】这就是一个接口 号称世界上最流行的Api框架1. 创建项目 2.导入依赖 ui就是不同的界面皮肤,想用哪种就导入哪种的ui3.编写一个Hello工程 4.编写一个配置类config层(以后只要需要配置类, 阅读详情

前言

项目使用的springfox-swagger2@2.9.2版本

在 Spring 中集成 swagger 文档功能,需要通过@ApiModel注解修饰出入参的类,但是如果有两个不同包下的相同名称的类都使用了@ApiModel注解时,会导致文档被覆盖,例如:

  • com.example.demo.login.dto.UserDTO

package com.example.demo.login.dto;

@Data
@ApiModel
public class UserDTO{
  @ApiModelProperty("姓名")
  private String name;
  @ApiModelProperty("年龄")
  private Integer age;
}
  • com.example.demo.vip.dto.UserDTO

package com.example.demo.vip.dto;

@Data
@ApiModel
public class UserDTO{
  @ApiModelProperty("姓名")
  private String name;
  @ApiModelProperty("会员级别")
  private Integer vipLevel;
}

上面两个类生成出来的文档会变成一个swagger model:

从而导致接口文档显示错误:

解决冲突

修改@ApiModel 注解(推荐)

通过修改@ApiModel 的 value 属性,来规避同名冲突,修改之后为:

package com.example.demo.login.dto;

@Data
@ApiModel("login$UserDTO")
public class UserDTO{}

package com.example.demo.vip.dto;

@Data
@ApiModel("vip$UserDTO")
public class UserDTO{}

可以看到生成了两个swagger model:

修改类名

把两个类名做修改,让类名不冲突即可。

自定义 swagger 插件

然而上面解决冲突的方式还是太麻烦了,定义一个文档的出入参类而已,还要考虑类重名的问题,这种增加心智负担和工作量的问题应该要尽量避免掉的,我在想有没有可能做到每个类上只需要加上@ApiModel注解就行,剩下的冲突问题全部不用考虑。

于是乎通过跟踪源码,找到了swagger model名称生成的地方,详见:github

可以看到取名的逻辑是,优先取@ApiModel的value值,如果没有就会使用defaultTypeName,跟进去一看,defaultTypeName是直接取类的简称,代码如下:

正是因为默认情况下取类的简称,导致不同包名下的同名类生成出来的swagger model被覆盖。
原因已经分析出来了,接下来其实就是看看能不能定制化这个super.nameFor(type)方法了,然而很遗憾这个方法是写死的,没地方下手,但是ApiModelTypeNameProvider这个类上两个注解@Component和@Order已经明示了这个是一个Spring bean,并且是通过Spring插件机制进行加载的,所以可以自定义一个插件来完成,在默认时通过完整的类路径和类名来生成唯一的swagger model,代码如下:

@Component
@Order(SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER - 100)
public class FullPathTypeNameProvider extends DefaultTypeNameProvider {

    public static final String SPLIT_CHAR = "$";

    @Override
    public String nameFor(Class<?> type) {
        ApiModel annotation = AnnotationUtils.findAnnotation(type, ApiModel.class);
        if (annotation == null) {
            return super.nameFor(type);
        }
        if (StringUtils.hasText(annotation.value())) {
            return annotation.value();
        }
        // 如果@ApiModel的value为空,则默认取完整类路径
        int packagePathLength = type.getPackage().getName().length();
        return Stream.of(type.getPackage().getName().split("\\."))
                .map(path -> path.substring(0, 1))
                .collect(Collectors.joining(SPLIT_CHAR))
                + SPLIT_CHAR
                + type.getName().substring(packagePathLength + 1);
    }

}

效果如下:

后记

通过这一个小小的优化,就可以减少许多团队中不必要的沟通成本,让我们能更专注于业务开发。



作者:mklee
链接:https://www.jianshu.com/p/bcbd1c8be789
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Spring Boot进阶(13):如何优雅获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值,附源码 如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?一文教会你。 阅读详情

相关推荐

差分信号_差分信号的原理及其在PCB的设计

差分线是 PCB 设计中非常重要的一部分信号线,信号处理要求也是相当严谨,今天为大家介绍下差分信号的原理以及其在 PCB 设计中的处理方法。 什么是差分信号 差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的振幅相等,相位相差 180 度,极性相反。在这两根线上传输的信号就是差分...

weixin_31849185的博客 1812

@ApiModel 和 @ApiModelProperty

@ApiModel 使用场景:在实体类上边使用,标记类时swagger的解析类 1.什么是Swagger OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,目前版本是V3.0,并且已经发布并开源在github上。 Swagger是符合OpenAPI规范的接口开发工具,支持从设计和文档到测试和部署的整个API生命周 期的开发 概述 提供有关swagge.

qq_43611698的博客 2万+

详解Σ-Δ型ADC拓扑结构的基本原理

现在,总环路滤波器的H(f)具有更大的滚降,Mod 2型的噪声传递函数具有40 dB/十倍频程的上升速率。同样,当正弦波输入为负满量程时,+1和–1之间的转换会减少,输出以–1为主。噪声传递函数是一个高通滤波器函数,提供噪声整形,在DC附近的较低频率,对量化噪声有很强的抑制。H(f)是环路滤波器的函数,定义噪声和信号的传递函数。Σ-Δ型ADC的噪底由热噪声决定,而不受量化噪声的限制。量化噪声为量化器的输入与输出之差。图5. Mod 1 Σ-Δ环路的线性模型(b),包括方程、滤波器、信号和噪声传递函数图。

qq_43416206的博客 1810

@ApiModel注解与@ApiModelProperty注解

在 ApiModelProperty 注解中直接声明 allowEmptyValue属性的值即可,如果不声明该属性,则默认为false,即字段参数的值不可以为空。具体使用就如上面的例子一样,如果不使用value时,默认值就是实体类的名称,所以除非有特殊说明或者实体类不清晰,否则直接使用默认值即可。属性就是用来描述实体中的参数字段是否必传,默认false,如果使用true,则该字段后面会有一个红色的星号。上的注解,它主要是用来对使用该注解的接口相关的实体类。上的注解,用来对具体的接口相关实体类中的。

weixin_51351637的博客 2万+

NT35310 LCD屏的初始化与图形显示实战:从画点到UI设计的完整指南

本文详细介绍了NT35310 LCD屏的初始化与图形显示实战,从硬件配置到UI设计全流程。内容包括8080总线连接、初始化序列、基础图形绘制算法、显示优化技巧以及UI框架实现,帮助开发者快速掌握TFT-LCD驱动开发技术,适用于工业控制和智能家居等嵌入式应用场景。

table的专栏 370

Linux Namespace隔离实战:dd/mkfs/mount/unshare构建终极沙箱

内存占用 | 512MB+ | **<10MB** | 50倍节省 || 启动时间 | 15-45秒 | **0.1-0.5秒** | 100倍加速 || 磁盘空间 | GB级 | **MB级** | 显著减少 || 系统调用性能 | 有损耗 | **原生速度** | 零损耗 |

Loving_enjoy的博客 398

@ApiModel

是 Swagger (现在通常被称为 OpenAPI) 中的一个注解,用于在 RESTful Web 服务中描述 API 的模型。注解通常用于 Java 类的顶部,这些类代表 API 响应或请求体中的模型对象。这个注解提供了关于模型的元数据,如模型的名称、描述和子类型等。通过使用这些注解,你可以更容易地为你的 RESTful Web 服务生成和维护 API 文档。注解则用于类中的字段,并为它们提供了额外的元数据,如字段的描述和是否必需等。),开发人员可以自动地生成这些文档,而无需手动编写和维护它们。

weixin_51687565的博客 2510

特征工程自动化(FeatureTools实战)

本项目模拟生成的医疗、金融和电商等领域的原始数据,适用于自动化特征工程的场景。主数据表(Entity Table):例如用户数据、交易数据、患者数据等。字段可能包括用户ID、年龄、性别、注册日期、消费金额、行为记录等。关联数据表(Related Tables):例如订单数据、点击记录、诊疗记录等。多个表之间通过外键建立关联。patient_id:患者IDage:年龄gender:性别:入院日期:出院日期diagnosis:诊断结果。

闲人编程的博客 1359

Swagger注解-@ApiModel 和 @ApiModelProperty

@ApiModel 使用场景 在实体类上边使用,标记类时swagger的解析类 概述 提供有关swagger模型的其它信息,类将在操作中用作类型时自动内省 属性 属性名称 数据类型 默认值 说明 value String 类名 为模型提供备用名称 description String “” 提供详细的类描述 parent Class<?> parent Void...

dejunyang的博客 13万+

(功能安全六)硬件FMEDA计算

FMEDA(故障模式、影响与诊断分析)是功能安全验证的核心方法,通过量化分析硬件故障模式及其影响,计算SPFM、LFM、PMHF等关键指标。分析过程包含六大步骤:计算元器件失效率、识别故障模式、评估安全机制诊断覆盖率、分类计算各类失效率、量化指标计算及设计优化。输入需要系统架构图、硬件故障模式清单等资料,输出安全指标达标情况及改进建议,确保设计满足ASIL等级要求。该方法通过系统化的故障分类和量化评估,为硬件安全设计提供科学依据。

Dayongger的博客 1451

AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研

在当今的人工智能时代,大模型技术的迅猛发展为各行各业带来了前所未有的变革。这些大模型,以其强大的语言理解和生成能力,正在逐步成为智能化应用的核心。然而,如何高效地利用这些大模型,构建出满足各种需求的应用,仍然是一个具有挑战性的问题。DB-GPT,作为一个开源的AI原生数据应用开发框架,应运而生,旨在简化大模型应用的开发过程,让构建智能化应用变得触手可及。本文将深入介绍DB-GPT的核心功能、关键特性,并通过实战操作,展示如何利用DB-GPT进行数据应用开发。DB-GPT是一个开源的AI原生数据应用开发框架。

寻道AI,探索AI无限可能! 1万+

SpringBoot整合swagger并修改默认UI

SpringBoot整合swagger前期准备1.添加依赖2.添加配置类3.使用3.1 实体类3.2 控制类4.访问5.使用的注解 前期准备 首先创建一个web项目,并整合lombok。可以参考之前的文章SpringBoot快速构建web项目-多模块项目 1.添加依赖 <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifac

Java菜鸟的进击之路 1386

①电子产品拆解分析-暖手宝

电子产品拆解分析-暖手宝 ①按键三档调温暖手; ②长按进入氛围呼吸灯; ③安卓接口充电以及支持USB输出;

a6662580的博客 5294

基于SpringBoot的Swagger使用

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的 Web 服务。作用支持API自动生成同步的在线文档提供Web以页面在线测试API。

weixin_45690338的博客 1026

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SpringBoot项目中使用Swagger2及注解解释(详细)

描述springboot的swagger2的用法,配置到注解讲解,很详细

m0_61820867的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

swagger : 定义接口及接口相关信息

1. 什么是swagger  Swagger 是一个规范和完整的框架,用于生成、描述、调用以及可视化的 Restful 风格的 Web 服务。   简单的理解:是一款 REST API 文档生成工具,生成在线的接口文档,方便接口测试。 2.为什么使用swagger 前后端分离开发时,为了方便前后端接口调用规范,需要提供一个接口文档,但是维护这个接口文档是一个及其繁琐的事情,可能一不小心就忘记更新该文档从而导致前后端接口调用失败。   Swagger 就是为了解决这个问题而出现的(在线接...

yiXin_Chen的博客 8923

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SpringBoot设置swagger(基本使用)

1.准备工作 在SpringBoot项目中导入swagger2 swagger-ui依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </depe

lc1062657810的博客 545

【Swagger】Springboot中集成Swagger2.0

文章目录一、前言二、使用前的准备三、正式进行开发工作四、注意 一、前言 Swagger是一个强大的API文档工具,使用Swagger可以轻松的将后端API的请求条件、所需参数、名称等告知前端的开发人员,可以说是前后端进行沟通的桥梁;在本篇博客中就来介绍一下在Springboot中如何集成Swagger2.0,从而来帮助我们更好的进行开发工作。 二、使用前的准备 在Springboot中集成Swagger2.0,就需要准备Swagger2.0的相关依赖,在这里以Maven项目管理工具来介绍相关的使用,首先我们

qgnczmnmn的博客 3437

Swagger Springboot Idea Swagger的API详解(二)

内容

qq_31333217的博客 730

Swagger 常用注解

主要对于swagger在项目中的常用注解的总结

m0_53067943的博客 1660

springboot+swagger2使用方法

springboot+swagger2使用方法 链接参考: Springboot 集成Swagger2后 接受实体类对象传参的实现方式. 额外补充: @ApiModel @Data public class User implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(notes = "id") private Long id; @ApiModelProp

下雨不打伞 270

SpringBoot集成Swagger3

swagger简介 Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。 当我们在后台的接口修改了后,swagger可以实现自动的更新,而不需要人为的维护这个接口进行测试。 swagger2常用注解: @Api() 用于类,表示标识当前Contr...

哈 1140

swagger注释API详细说明

说明: 1.这里使用的版本:springfox-swagger2(2.4)springfox-swagger-ui (2.4) 2.这里是说明常用注解的含义和基本用法(也就是说已经对swagger进行集成完成) 没有集成的请参见 SpringBoot集成springfox-swagger2构建restful API SpringMVC集成springfox-swagger2构建restful AP...

大鹏小站的博客 1265

【springboot集成swagger2.9.2】

前后端分离后端时代:前端值用管理静态页面;html==>后端。模板引擎jsp==>后端是主力后端:后端控制层,服务层,数据访问层【后端团队】前端:前端控制层,视图层【前端团队】前端可以自定义一些伪后端数据:json,在写的时候就存在,不需要后端,前端工程依旧能够跑起来那么前端后端如何交互?此时我们可以考虑API前后端分离好处:前后端相对独立,松耦合前后端设置可以部署在不同的服务器上前后端集成,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发解决方案。

weixin_62169170的博客 546

Swagger的安装以及SpringBoot整合Swagger2实现SwaggerAPI文档测试

前言 本篇博客是本人在网上学习Swagger所产出的个人笔记。主要内容有: 1.Swagger的安装 2.Swagger的介绍 3.Swagger2中常用的注解 4.快速上手案例 准备工作:Swagger Editor安装与启动 1.到官网下载 https://swagger.io/download-page/ 2.解压swagger-editor-master 3.全局安装http-se...

ScholarTang的博客 878

@ApiModel与@ApiModelProperty 怎么用?

ApiModel和是 Swagger(也称为 OpenAPI)框架中的注解,用于描述 RESTful API 的模型和数据结构。Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

anguang1973的专栏 1069
上一篇: SpringBoot连接Mysql数据库
下一篇: Spring中几个自动注入的注解的优先级
java_t_t
博客等级 码龄9年 171粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值