swagger

您所在的位置:网站首页 unpable swagger

swagger

2023-12-30 08:56| 来源: 网络整理| 查看: 265

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