安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

自定义SpringBootSwagger中ApiModel默

8月12日 游鱼坊投稿
  前言
  项目使用的springfoxswagger22。9。2版本
  在Spring中集成swagger文档功能,需要通过ApiModel注解修饰出入参的类,但是如果有两个不同包下的相同名称的类都使用了ApiModel注解时,会导致文档被覆盖,例如:com。example。demo。login。dto。UserDTOpackagecom。example。demo。login。DataApiModelpublicclassUserDTO{ApiModelProperty(姓名)privateSApiModelProperty(年龄)privateI}com。example。demo。vip。dto。UserDTOpackagecom。example。demo。vip。DataApiModelpublicclassUserDTO{ApiModelProperty(姓名)privateSApiModelProperty(会员级别)privateIntegervipL}
  上面两个类生成出来的文档会变成一个swaggermodel:
  从而导致接口文档显示错误:
  解决冲突修改ApiModel注解(推荐)
  通过修改ApiModel的value属性,来规避同名冲突,修改之后为:packagecom。example。demo。login。DataApiModel(loginUserDTO)publicclassUserDTO{}packagecom。example。demo。vip。DataApiModel(vipUserDTO)publicclassUserDTO{}
  可以看到生成了两个swaggermodel:
  修改类名
  把两个类名做修改,让类名不冲突即可。自定义swagger插件
  然而上面解决冲突的方式还是太麻烦了,定义一个文档的出入参类而已,还要考虑类重名的问题,这种增加心智负担和工作量的问题应该要尽量避免掉的,我在想有没有可能做到每个类上只需要加上ApiModel注解就行,剩下的冲突问题全部不用考虑。
  于是乎通过跟踪源码,找到了swaggermodel名称生成的地方,详见:github
  可以看到取名的逻辑是,优先取ApiModel的value值,如果没有就会使用defaultTypeName,跟进去一看,defaultTypeName是直接取类的简称,代码如下:
  正是因为默认情况下取类的简称,导致不同包名下的同名类生成出来的swaggermodel被覆盖。原因已经分析出来了,接下来其实就是看看能不能定制化这个super。nameFor(type)方法了,然而很遗憾这个方法是写死的,没地方下手,但是ApiModelTypeNameProvider这个类上两个注解Component和Order已经明示了这个是一个Springbean,并且是通过Spring插件机制进行加载的,所以可以自定义一个插件来完成,在默认时通过完整的类路径和类名来生成唯一的swaggermodel,代码如下:ComponentOrder(SwaggerPluginSupport。SWAGGERPLUGINORDER100)publicclassFullPathTypeNameProviderextendsDefaultTypeNameProvider{publicstaticfinalStringSPLITCHAR34;;OverridepublicStringnameFor(C?type){ApiModelannotationAnnotationUtils。findAnnotation(type,ApiModel。class);if(annotationnull){returnsuper。nameFor(type);}if(StringUtils。hasText(annotation。value())){returnannotation。value();}如果ApiModel的value为空,则默认取完整类路径intpackagePathLengthtype。getPackage()。getName()。length();returnStream。of(type。getPackage()。getName()。split(。))。map(pathpath。substring(0,1))。collect(Collectors。joining(SPLITCHAR))SPLITCHARtype。getName()。substring(packagePathLength1);}}
  效果如下:
  后记
  通过这一个小小的优化,就可以减少许多团队中不必要的沟通成本,让我们能更专注于业务开发。
  本文首发于我的博客:https:monkeywie。cn,欢迎收藏!不定期分享JAVA、Golang、前端、docker、k8s等干货知识。
投诉 评论 转载

世链投研Solana逐渐起势,能否成为真正的以太坊杀手?随着加密货币市场热度的攀升,素有智能合约公链之王之称的以太坊成为了当之无愧的业界权威,坐拥了大量的用户和流量。不过,正所谓成也萧何,败也萧何,伴随着以太坊的崛起,诸多问题也随之……有哪些好看到舍不得换的手机壁纸?这些都是我非常喜欢的。中国红,主旋律!这是我的手机壁纸最为一个资深的龙珠迷来说,其他的一切神马都浮云,当然我空神和老贝了,不过现在已经不满足于中规中矩的龙珠图……不留北京重返沙漠,他在西北默默实验10年才发一篇文章任芳言陈欢欢人们对风沙往往唯恐避之不及,但李新荣偏偏是爱往沙漠跑的那一个。皮肤黝黑,脸颊宽宽,冲锋衣里穿衬衫,鼻上一副无框镜,见到他的人不难猜出这是位常年在野外工作的学者……自定义SpringBootSwagger中ApiModel默前言项目使用的springfoxswagger22。9。2版本在Spring中集成swagger文档功能,需要通过ApiModel注解修饰出入参的类,但是如果有两个……利好美团阿里,三四线城市的下一个独角兽将出现这些领域!近日,《独角兽内参》获得了一份中国App类型在一二线城市与三四线城市、乡村渗透率对比的数据报告。什么意思呢?说白了就是不同类型的App在城市、乡镇、农村的普及率对比。这非……微信要推收费功能了?苹果180一年,安卓130,你会用么?昨天,有媒体报道称,微信要收费了,采用包年制,苹果用户或180元年,安卓用户130元年,一时让大家震惊不已,很多人甚至还没看清楚内容,一看收费就开始吐槽。因为过去的这些年……三星发布大会推出了折叠手机无线耳机智能手表三星今天在一场网络发布会上推出了一系列新产品,包括GalaxyZFold3和GalaxyZFlip3可折叠智能手机、GalaxyBuds2无线耳塞和GalaxyWatch4智能……对马斯克,我们要正反两面看我们承认马斯克是个牛人,一己之力创造了很多大多数人创造不起来的事迹。看看它创立的企业特斯拉、SPACEX、星链等等,都很有创造力。这你得承认它的创意和工程实践能力都是独一无二的……想买一台二手相机闲鱼和转转哪个靠谱?敲重点啦首先,闲鱼和转转都是两个二手产品的交易平台,在简化交易的便捷下,二手交易的不确定和风险也相对于更多一些,因此二手平台在风险控制、规则管理上的措施尤为重要。相机这种……手机怎样充电对电池最好?不是说手机电池有记忆,而是电池是具有使用寿命的。现在手机基本都是锂电池,而锂电池的循环次数达到一定之后,电池内的化学物质活性会下降,也就导致了电池的性能表现下降。当我们给……智能自动化对现代工作场所的影响智能自动化正在以多种方式改变现代工作场所最近几个月因COVID19大流行而中断,工作空间发生了变化。它从实体办公室转变为个人空间。我们所有人都接受了数字化和自动化,这正在……双耳均有听力损失只戴一个助听器可以吗?配助听器的原因总体来说是为了保护残余听力,改善聆听效果,提高生活质量。如果听力下降就应尽早配助听器,因为只有及时配助听器不断刺激耳神经,才能尽量保持现有的听力。在药物治疗……
什么手机有电视机遥控器功能?李毅中商用车宜用绿氢氢燃料电池替代我国快递件突破1000亿件的背后,我们得到和失去的是什么?宁德时代股价跌破500元关口零跑赴港上市被坐实。IntelCPU的发展历程(十)Vue3拒绝写return,用setup语法糖,让写Vue3如何看待格力加入鸿蒙安卓手机商对华为鸿蒙的排斥性如何?设计太复杂,苹果手表难产科技犬一文看懂内折外翻卷曲,七款折叠屏手机到底咋选腾讯的上限与下限手慢无国民爆款小米S300电动剃须刀,特价87元5G,到底离我们还有多远?处暑至,饮食忌二样,建议多吃3个2,滋阴敛阳,为秋冬打基础劳动课安全第一教案你心中所想,就是你的人生第一家捐款外企!库克苹果将支持河南救援和重建工作青春岁月我与成长相约植树节好段好句植树节简短祝福句子(四)京东丁德明用技术和服务改变产业价值链阳刚男孩读后感有关于最美教师的作文高通领跑!全球智能手机处理器收益排行出炉苹果进前三中考满分作文放学归来清风老道:美在中东特别是叙利亚问题上处于焦。。。

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利