美文网首页
springboot 集成swagger2.0 复合主键引起的j

springboot 集成swagger2.0 复合主键引起的j

作者: 江南烟雨断桥 | 来源:发表于2018-07-19 17:33 被阅读0次

swagger2.0在生成接口文档的时候,如果接口中的对象包含嵌入或者复合主键,则会引起java.lang.StackOverflowError: null异常,只需要在controller层的方法上加上@ApiIgnore注解即可。但是这样的话方法就无法显示了。

所以如下解决:

集成swagger-ui时,在项目启动的时候,如果接口参数的属性出现嵌套,就会出现无限递归,进而导致StackOverFlowError,如下图: 

原因在于swagger在读取参数的时候,如果发现参数的属性也是一个对象时会继续进行展开,代码如下: 

由此就可能出现我遇到的这种情况:(笑哭) 

就这样没玩没了的展开,直到内存爆炸~~~

那怎么解决呢? 

在网上找资料的时候看到这么一篇文章: 

springfox-swagger 参数是对象无限递归解决方案 

作者的解决方案是把递归展开的代码注释掉,不过我觉得不妥,一是因为注释掉,会影响非嵌套对象的正常展开,而是还需要把注释后的类替换掉原来内置的类,操作上会比较麻烦。 

回过头来再看看代码,发现有这么一段: 

这段的意思就是按照设定的转换规则把部分类型转换成指定的类型,然后在筛选需要展开的类型中过滤掉这些类,可以看到代码中已经内置了14个转换规则,我猜测可能就是把会出现递归的对象给处理掉(没有具体看),毕竟java原生的很多类也可能是嵌套的吧。既然如此,那是不是可以把我们代码中出现的嵌套对象也添加到这些规则中呢,哈哈,那是必须的啊,如下: 

重启服务,可以了。

相关文章

  • springboot 集成swagger2.0 复合主键引起的j

    swagger2.0在生成接口文档的时候,如果接口中的对象包含嵌入或者复合主键,则会引起java.lang.Sta...

  • 2018-07-09 复合主键

    Mysql 多列形成主键(复合主键 ) 什么是数据表的复合主键所谓的复合主键 就是指你表的主键含有一个以上的字段组...

  • Hibernate 菜鸟教程 8 复合主键

    复合主键 复合主键的意思就是2个字段同时为主键不使用无业务含义的自增id作为主键 模型对象Airline 映射文件...

  • SpringBoot 集成

    SpringBoot 集成 redis SpringBoot集成mongodb SpringBoot集成Beetl...

  • 第15章 SpringBoot集成logging日志

    第15章 SpringBoot集成logging日志 15.1 SLF4J与Logback简介 15.2 spri...

  • 完整性约束

    主键约束 primary key 复合主键 自增长 AUTO_INCREMENT (需要配合主键来使用 否则报错)...

  • 2020-03-11 记录mongdb(3)

    基本操作: 文档主键 _id 文档主键的唯一性 支持所有数组类型(数组除外) 复合主键 对象主键 Ob...

  • SpringBoot集成Neo4j

    目前在网络上对于SpringBoot集成Neo4j的文章比较少,而且大部分都过时了,经过一番折腾,终于集成成功。 ...

  • OneToMany 一端复合主键做多端的外键

    一端有个复合主键,作为多端的外键,数据表如下: 代码: 复合主键的定义: 一端的定义: 多端的定义:

  • JPA复合主键

    在JPA中,我们可以使用复合主键,也就是说在一个类中可以拥有两个有@ID属性的字段。当然,我们也可以ID类, 使用方式:

网友评论

      本文标题:springboot 集成swagger2.0 复合主键引起的j

      本文链接:https://www.haomeiwen.com/subject/uwotmftx.html