配置Swagger错误解决步骤:documentationPluginsBootstrapper入手
我在springboot2.6中配置swagger。因为不想在postman中编辑请求体,而swagger可以直接在网页进行api调试,这样我就可以方便复制数据到postman中永久保存。我的步骤是这样的,这看起来毫无问题:
添加maven,最新版只需配置一个依赖
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>
添加swagger注解配置类,比如:
@Configuration @EnableSwagger2 public class SwaggerConfig { @Value("${server.servlet.context-path}") private String contextPath; @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("xxx/xxx/xxx")) .build() .pathMapping(contextPath); } }但是启动报错:
Failed to start bean ‘documentationPluginsBootstrapper‘此问题是因为springboot 2.x版本将antPathMatcher更改为pathPatternMatcher,而swagger仍使用antPathMatcher导致的问题,所以在yml配置文件中配置“matching-strategy: ant_path_matcher”即可。但是呢,应用启动正常,但是访问swagger-ui.html界面出现404问题,这是因为高版本的swagger依赖修改了ui访问路径。在依赖包META-INF.resources.webjars.springfox-swagger-ui下,没有swagger-ui.html文件,但是有index.html文件。因此访问localhost:{port}/{context-path}/swagger-ui/index.html就能成功看到界面了,不需要做任何放行swagger静态资源的配置,因为在SwaggerUiWebMvcConfigurer类源码中重写了addResourceHandlers方法:
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { String baseUrl = StringUtils.trimTrailingCharacter(this.baseUrl, '/'); registry. addResourceHandler(baseUrl + "/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/") .resourceChain(false); } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController(baseUrl + "/swagger-ui/") .setViewName("forward:" + baseUrl + "/swagger-ui/index.html"); } }刷新界面,可以看到界面访问正常。但是会发生这样的问题,就是我的项目中明明有接口注解Controller,但是界面却是空的,显示“no operations defined”,这是因为前面的swagger注解配置类没有正确扫包,应该这样:
@Configuration @EnableSwagger2 // can not missing the Scan @ComponentScan("xxx.xxx.xxx.controller") public class SwaggerConfig { ........ @Bean public Docket docket() { ......... } }注意上面的@ComponentScan不能丢失且包正确,正常接口都是controller目录下。刷新就能看到你所有的接口了,可以在界面上直接测试接口。要想清晰的解释接口的作用、各个参数含义、返回值描述,让前端可以理解,你还需要用到一些注解。比如最常见的:
- @Api:用在类上,描述一个Controller
- @ApiOperation:在接口方法上,描述Action接口作用。包括(Response)返回的模型描述
- @ApiParam:用在接口参数上
- @ApiImplicitParam:必须用在@ApiImplicitParams中,用于同一描述参数含义,而不必像@ApiParam那样对每个参数都使用注解
- @ApiModel:描述一个Model类信息
- @ApiResponse:必须用在@ApiResponses中,一般用于描述错误请求和异常
来自:Java
更新于2023-02-22 20:23:43 发表于2023-02-18 21:55:00
更新于2023-02-22 20:23:43 发表于2023-02-18 21:55:00
发表您的评论