范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

自定义SpringBootSwagger中ApiModel默认名称

  前言
  项目使用的springfox-swagger2@2.9.2版本
  在 Spring 中集成 swagger 文档功能,需要通过@ApiModel注解修饰出入参的类,但是如果有两个不同包下的相同名称的类都使用了@ApiModel注解时,会导致文档被覆盖,例如:com.example.demo.login.dto.UserDTOpackage com.example.demo.login.dto;  @Data @ApiModel public class UserDTO{   @ApiModelProperty("姓名")   private String name;   @ApiModelProperty("年龄")   private Integer age; }com.example.demo.vip.dto.UserDTOpackage 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 = "#34;;      @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);     }  }
  效果如下:
  后记
  通过这一个小小的优化,就可以减少许多团队中不必要的沟通成本,让我们能更专注于业务开发。
  本文首发于我的博客:https://monkeywie.cn,欢迎收藏!不定期分享JAVA、Golang、前端、docker、k8s等干货知识。

Android11公开测试版正式发布,这些新增的功能你都了解吗?6月11日,Android11Beta1正式推出,主要更新了短信通知界面气泡通知隐私功能智能家居控件等方面。Pixel系列均可率先尝鲜体验,OPPOFindX2系列将在本月22日前走在技术开发前沿,软件项目商测试触控一体机要选这样的随着互联网技术的不断发展和进步,带动了众多附属产业的高速发展,软件开发为其一。在庞大的市场需求下,许多软件项目开发商在这波软件发展趋势中收获可观效益。软件开发作为一项包括需求捕捉需5000mAh的续航猛兽,iQOOZ1x续航实际测试5G时代的手机续航表现是我个人非常重视的一点,毕竟5G手机的功耗整体会比4G更高一些。目前很多手机的电池容量基本上就维持在4500mAh左右,而iQOOZ1x则以5000mAh大容应用分析工业一体机让肺功能测试仪全自动化分析成为可能由于工业级一体机在性能上比商用一体机性能更优,并支持定制化功能,使得其在医疗行业备受用户欢迎。在医疗自助取片终端智能药柜医疗推车超声彩色影像远程视频会议心电仪等重要医疗设备中,都可产品品质保障的秘密武器?工业级一体机厂家实验测试室大揭秘伴随信息时代发展的步伐,智能硬件迎来了广阔的应用市场,加上各行各业对智能化需求的不断加剧,使得越来越多的智能硬件成为了行业进步发展不可缺少的助力之一。其中,工业触控显示设备作为广泛车载显示设备,一台移动影音设备?如何选择适合的车载设备要问当下什么行业最火,新能源汽车排第二,没有谁敢排第一,除了传统造车企业进军新能源汽车,很多大公司也纷纷下场宣布造车。造车大热带动了和汽车零部件上下游供应链相关技术大热,锂电池玻璃无人操作自动分类精准投递,这些移动机器人成精了工业转型带动了许多分支产业的快速发展,机器人行业便是其中之一。除了中所周知的工业机器人,实际上移动机器人的市场份额也不小。在市场需求不断加剧的大环境下,智能化移动机器人成为了大部分宽动态活体检测功能,是触控一体机实现自动测温的前提红外热释感应器一般组成结构为透镜感光元件感光电路机械部分和机械控制部分。其运转主要是通过机械控制部分和机械部分,带动红外感应部分做微小的左右或圆周运动,移动位置,使感应器和人体之间触控一体机or工控机,触想让医疗搬运机器人都可选随着机器人应用面的不断拓展,使得市面上的机器人品类越来越丰富。基于近期对于医疗行业的众多热点话题,触想小编此前已经整理了不少,今天继续为大家带来医疗搬运机器人的相关应用点。医疗搬运小米手表第四次OTA升级新增多项功能与百款表盘作为小米首款智能手表产品小米手表自去年双十一发布即成为史上最畅销的WearOS手表,仅去年双十一单日销售额破亿,有业内人士表示小米手表一天的销量是过去所有安卓手表一年的销量。小米手风头正劲的雅阁迎来中期改款预售17。98万起编者按第十代雅阁自2018年国产化以来,已经走过超3个年头,是时候迎来中期改款了。作为一款中高级车,第十代雅阁上市3年就在国内收获了超60万用户,且连续两年成为中高级车销冠。相关数
造出一块更好的屏幕有多难眼前的黑不是黑。文丨张家豪编辑丨程曼祺这样一项技术,索尼从高校实验室里发现了它,并做出了最早的样品,韩国三星对它持续投入,但进展不算迅速京东方华星光电等中国公司也在近5年跟进,据公2022,造车的玩法变了深途(shentucar)原创作者黎明编辑魏佳轰轰烈烈的造车运动,到了新的一年丝毫没有减速的迹象。在过去一个月,索尼官宣造车,小牛电动创始人李一男造车的官图发布,售价超过100万元Arm为何选择赴美上市?科技心语在全球最大手笔的芯片收购交易案告吹后,软银CEO孙正义表示,Arm将最有可能在美国纳斯达克交易所上市,而此前市场预期Arm计划在伦敦上市。英国芯片巨头赴美上市的选择反映了芯片市场对如果不分红,华为会怎样?华为正处于一个艰难时期,出于企业和员工共度时艰的考虑,华为此时不分红,或者再降低一些分红额度,似乎也合理。但此时仍然分红,体现了企业担当文顾翎羽编辑谢丽容关注华为2021年员工持股我在互联网大厂当审核员2022年春节后的第一个工作日,一则B站审核组组长加班猝死的消息引起社会热议。互联网审核员这个幕后职业也随之被推到聚光灯下。红星资本局发现,互联网审核员的现状,也是一个行业成长的缩俄罗斯一台光刻机都没有,为什么不怕被卡脖子?值得中国学习阅读下面文章之前,希望您能够在上方点个免费的关注!接下来您每天都能够收到免费的国际资讯哟!您的关注是我的动力多多支持下嘛!!自从进入到科技时代,世界各国的发展就在不断加速,仅仅20科技赋能冬奥惊喜连连2022北京冬奥会激战正酣,来自世界各地的顶尖高手在不同的赛场上尽情挥洒着自己的天赋,体验着站在最顶级赛场的乐趣,同时也为全世界观众带来一场场视觉盛宴。而在赛场外,从厨房到卧室,从cpuid和序列号背后的那些故事最近测试反馈了一个问题,每次重启服务器,我们某个版本的业务系统中的机器码都会改变,导致根据机器码算出来的许可证失效,从而使软件无法使用。这个问题反馈了有一段时间了,但是本地一直没复最新揭秘小米米家智能门锁推拉式真实感受曝光?真实体验曝光智能门锁电子门锁行业发展至今,消费者的选购过程经历了从简单到复杂再回归简单的过程。小米的质量非常好,毋庸置疑。外观设计非常精良做工材质很重,很厚实。智能功能功能强大,指纹,密码,手最详细教程最新ACR14。2独立安装包(WinMac)三天之前,上一期的最新版PS2022(自带ACR14。2)推送之后,有不少朋友反馈说整个PS2022升级安装包太大了,不仅下载比较麻烦,而且还要把整个PS覆盖安装,太费事儿。我不想今天是腾讯QQ23岁生日,官方视频揭秘小企鹅塞红包和送消息IT之家2月10日消息,今天2月10日,是QQ的23岁生日!腾讯官方表示,其实QQ背后一直隐藏着一个不为人知的世界!腾讯表示,为了在往后的日子里,QQ能和大家更好地拥抱彼此,感情继