swagger |
您所在的位置:网站首页 › unpable › swagger |
Unable to scan documentation context default
记录项目中swagger插件不生效问题及解决问题排查记录,先上报错日志
2023-05-08 18:17:21.189 [main] ERROR s.d.s.web.plugins.DocumentationPluginsBootstrapper - 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:635)
at java.util.HashMap.put(HashMap.java:612)
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:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
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)
at java.util.HashMap.computeIfAbsent(HashMap.java:1127)
at springfox.documentation.spring.web.scanners.CachingOperationReader.read(CachingOperationReader.java:48)
at springfox.documentation.spring.web.scanners.ApiDescriptionReader.read(ApiDescriptionReader.java:72)
at springfox.documentation.spring.web.scanners.ApiListingScanner.scan(ApiListingScanner.java:169)
at springfox.documentation.spring.web.scanners.ApiDocumentationScanner.scan(ApiDocumentationScanner.java:67)
at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.scanDocumentation(AbstractDocumentationPluginsBootstrapper.java:96)
at springfox.documentation.spring.web.plugins.AbstractDocumentationPluginsBootstrapper.bootstrapDocumentationPlugins(AbstractDocumentationPluginsBootstrapper.java:82)
at springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper.start(DocumentationPluginsBootstrapper.java:100)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178)
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356)
at java.lang.Iterable.forEach(Iterable.java:75)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:771)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:763)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:339)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1318)
解决方法 一
某个接口定义的参数对象里面的属性(PO,DTO等用了@ApiModelProperty注解的地方),使用了public修饰,并且使用@Data生成了对应的getter、setter方法,这个是其中一种情况,这种情况出现在springfox.documentation.spring.web.readers.parameter.ModelAttributeParameterExpander类,以下代码块中 private List allModelAttributes( Map propertyLookupByGetter, Iterable getters, Map fieldsByName, AlternateTypeProvider alternateTypeProvider, Collection ignorables) { Stream modelAttributesFromGetters = StreamSupport.stream(getters.spliterator(), false) .filter(method -> !ignored(alternateTypeProvider, method, ignorables)) .map(toModelAttributeField(fieldsByName, propertyLookupByGetter, alternateTypeProvider)); Stream modelAttributesFromFields = fieldsByName.values().stream() .filter(ResolvedMember::isPublic) .filter(ResolvedMember::isPublic) .map(toModelAttributeField(alternateTypeProvider)); return Stream.concat( modelAttributesFromFields, modelAttributesFromGetters) .collect(toList()); }解决方式很简单当对应的实体上public修饰的属性设置为private后(或者去除@Data注解),问题解决。 解决方式 二排查代码过程中发现一个实体内@ApiModelProperty注解存在相同的值 @ApiModel("test") @Data public class TestPO{ @ApiModelProperty(name = "名称",notes = "") private String name; @ApiModelProperty(name = "名称",notes = "") private String notes; }如上代码,存在2个名称,启动时同样会报Unable to scan documentation context default错误,解决方案就是改对应的名称,保证不重复 解决方式 三网上有人说 @ApiModelProperty(name = “主键id”,notes = “主键id”) 注解在id上name是 主键id,改成 @ApiModelProperty(name = “id”) 问题能解决,亲测是不会受影响的,即使是存在中文也能正常解析,没解决问题的小伙伴可以试试 解决方式 四检查swagger 扫码的对应的包是否正确 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |