问题描述:TypeError: n.forEach is not a function
这个问题出现后,knife4j界面空白,/swagger-resources接口返回值格式如下所示:
而正确的返回值格式为:
所以,原因就是该接口的返回值格式不是knife4j能够解析的格式,导致报错。
定位问题及解决:
检查自己的代码是否做了统一返回值格式的切面定义。我的代码中有如下定义:
@RestControllerAdvice注解会在所有RestController的返回结果返回前做统一封装,所以要排除在knife4j调试的接口,有的解决方案是给@RestControllerAdvice配置了扫描的包,basePackages是限制这个切面类的定义仅适用于这个这个包下的以及子包下的所有类。具体如下:
@RestControllerAdvice(basePackages = {"com.fyk.wq"}, annotations = {RestController.class})
我按照以上方法修改后,是无效的,然后我注意到了该类的beforeBodyWrite()方法,既然/swagger-resources请求的返回结果解析不到,那在这个方法中排除/swagger-resources请求就行,修改如下:
果然,knife4j界面有了接口,问题解决。