美文网首页
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

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