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

2018-07-19  本文已影响0人  江南烟雨断桥

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

所以如下解决:

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

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

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

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

那怎么解决呢? 

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

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

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

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

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

重启服务,可以了。

上一篇 下一篇

猜你喜欢

热点阅读