spring boot集成swagger3
swagger2的整合:https://www.cnblogs.com/chenglc/p/10910721.html
swagger3的使用步驟和2略有差異
maven依賴
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
swagger3.0的依賴將springfox-swagger-ui和springfox-swagger2整合到了springfox-boot-starter,還包括一些spring的依賴,說一不需要再去關心其他的依賴。
開啟swagger
和2版本一樣,需要一個swagger的配置,用於配置基本信息
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
* swagger配置
*/
@Configuration
public class SwaggerConfig {
Boolean swaggerEnabled = true;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
// 是否開啟
.enable(swaggerEnabled)//true
.select()
.apis(RequestHandlerSelectors.basePackage("com.clc.resource"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("資源中心swagger業務")
//創建人
.contact(new Contact("clc", "http://www.baidu.com", "clc@x.com"))
.version("1.0")
.description("不需要描述")
.build();
}
}
默認訪問地址
http://localhost:port/swagger-ui/index.html
和2版本地址不同:http://localhost:port/swagger-ui.html
spring boot 2.6.x 版本配置
如果是spring boot 2.6.x集成了swagger,會出現異常信息:
Failed to start bean 'documentationPluginsBootstrapper';
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.14.jar:5.3.14]
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.14.jar:5.3.14]
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.14.jar:5.3.14]
at org.springframework.context.support.DefaultLifecycleProcessor$$Lambda$627/1737023457.accept(Unknown Source) ~[na:na]
at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_31]
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.14.jar:5.3.14]
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.14.jar:5.3.14]
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.14.jar:5.3.14]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.14.jar:5.3.14]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.2.jar:2.6.2]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) [spring-boot-2.6.2.jar:2.6.2]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) [spring-boot-2.6.2.jar:2.6.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) [spring-boot-2.6.2.jar:2.6.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) [spring-boot-2.6.2.jar:2.6.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) [spring-boot-2.6.2.jar:2.6.2]
因為Springfox使用的路徑匹配是基於AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher
解決方案
加spring配置指定AntPathMatcher
spring.mvc.pathmatch.matching-strategy: ANT_PATH_MATCHER
使用示例
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
/**
* ClassName: JSR303Controller
* Description:JSR303協議測試
*
* @author chengluchao
* @date: 2022/1/11 14:49
* @since 1.3.9
*/
@Api("JSR303協議")
@Validated
@RestController
@RequestMapping("/jsr303")
@Slf4j
public class JSR303Controller {
@ApiOperation("批量保存數據")
@ResponseBody
@PostMapping("batchSave")
public Object batchSave(@RequestBody @Validated(ValidationGroupSequence.class) BatchSysGroupDto dto) {
return "Result.okInstance();";
}
}
效果

swagger3.0新功能
- Webflux支持
- Spring Integration支持
- SpringBoot支持springfox Boot starter依賴性(零配置、自動配置支持)
- 支持OpenApi 3.0.3
CLC
