对若依的系统工具自动生成的代码添加接口注解,然后就报错了

ERROR s.d.s.w.p.DocumentationPluginsBootstrapper - [scanDocumentation,98] - Unable to scan documentation context default
java.lang.NullPointerException: null
    at springfox.documentation.schema.Example.equals(Example.java:131)
    at java.util.Objects.equals(Objects.java:59)
    at springfox.documentation.service.RequestParameter.equals(RequestParameter.java:132)
    at java.util.HashMap.putVal(HashMap.java:636)
    at java.util.HashMap.put(HashMap.java:613)
    at java.util.HashSet.add(HashSet.java:220)
    at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
    at springfox.documentation.spring.web.readers.operation.OperationParameterReader.apply(OperationParameterReader.java:93)
    at springfox.documentation.spring.web.plugins.DocumentationPluginsManager.operation(DocumentationPluginsManager.java:144)
    at springfox.documentation.spring.web.readers.operation.ApiOperationReader.read(ApiOperationReader.java:72)
    at springfox.documentation.spring.web.scanners.CachingOperationReader.lambda$new$0(CachingOperationReader.java:43)

首先可以确认之前是没有报错的,当下修改的主要是,添加控制器及方法的注解,和添加请求参数实体及属性的注解。

通过在新添加接口注解的控制器上添加 @ApiIgnore 来使 swagger 忽略该控制器,测试没有报错。这样可以一个一个的去除该注解来确认出现 swagger 注解错误的控制器及其请求参数实体。但需要的测试太多也太慢了。

百度一下,找到一篇相关的解决方法:使用swagger遇到的问题-启动服务出现空指针异常(Unable to scan documentation context default),描述非常准确且一致。

提到的原因:

针对此问题,研究发现,引起这个错误的是某个entity类,进一步检查发现这个实体类中成员变量使用的属性权限是public;自己在定义变量时,不小心把成员变量的属性都弄成了public,swagger在获取参数时,不能正确识别成员变量的权限。

针对引入的参数实体一个个找,很快找到了权限为 public 的属性:

    @Excel(name = "ACC状态,1表示开启,0表示关闭")
    @ApiModelProperty(value = "ACC状态,1表示开启,0表示关闭", required = true)
    public Integer accStatus;

也只有这一个属性标记错了,不确定是复制错了还是其他什么原因。修改为 private 之后,重启 OK!