配置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
此内容暂不允许评论