方案1:knife4j v2
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.6.0'
implementation group: 'com.github.xiaoymin', name: 'knife4j-spring-boot-starter', version: '2.0.9'
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {
@Bean(value = "defaultApi2")
public Docket defaultApi2() {
Docket docket=new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
.description("# swagger-bootstrap-ui-demo RESTful APIs")
.termsOfServiceUrl("http://www.xx.com/")
.contact(new Contact("张三","http://zhangsan.com","aa@xx.com"))
.version("1.0")
.build())
.groupName("2.X版本")
.select()
.apis(RequestHandlerSelectors.basePackage("com.aa"))
.paths(PathSelectors.any())
.build();
return docket;
}
}
@Api(tags = "首页模块")
@RestController
public class IndexController {
@ApiImplicitParam(name = "name",value = "姓名",required = true)
@ApiOperation(value = "向客人问好")
@GetMapping("/sayHi")
public ResponseEntity<String> sayHi(@RequestParam(value = "name")String name){
return ResponseEntity.ok("Hi:"+name);
}
}
方案2: knife4j v3
implementation group: 'com.github.xiaoymin', name: 'knife4j-spring-boot-starter', version: '3.0.3'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.6.0'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation', version: '2.6.0'
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
@Configuration
@EnableSwagger2
public class Knife4jConfiguration {
}
方案3: Spring Doc
implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.5.12'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.6.0'