1.Maven依赖
<!-- swagger.v3-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- 第三方ui包-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
2.在启动类中加入相关注解:@EnableOpenApi
@SpringBootApplication
@ComponentScan(value = {
// 必须:扫描框架配置
"com.manage",
// 必须:本项目扫描路径
"com.manage"
})
@Log4j2
@MapperScan(basePackages = "com.manage.infrastructure.persistence.mapper")
@EnableOpenApi
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
3.在相关的api中加入相关注解
/**
* 接口
*
* @author sx
* @since 2024-02-18 13:39
*/
@RequestMapping(value = "/v1/user")
@RestController
@AllArgsConstructor
@Tag(name = "用户接口", description = "用户接口")
public class UserApi {
/**
* 应用服务
*/
private final UserAppService userAppService;
/**
* 创建
*
* @param createRequest 创建对象
* @return 响应结果
*/
@PostMapping
@Operation(summary = "创建", description = "创建")
public ResponseResult<Void> create(@RequestBody @Valid UserCreateRequest createRequest) {
return userAppService.create(createRequest);
}
}
4.在请求参数中加入相关注解(返回参数都可以加相关注解)
package com.manage.application.api.request;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.time.LocalDate;
/**
* 创建请求对象
*
* @author sx
* @since 2024-02-18 13:39
*/
@Getter
@Setter
@ToString
@Schema(description = "创建请求对象")
public class UserCreateRequest {
/**
* 名字
*/
@Schema(description = "名字")
private String name;
/**
* 性别(F女 M男)
*/
@Schema(description = "性别(F女 M男)")
private String sex;
/**
* 年龄
*/
@Schema(description = "年龄")
private Integer age;
/**
* 出生日期
*/
@Schema(description = "出生日期")
private LocalDate birth;
/**
* 联系方式
*/
@Schema(description = "联系方式")
private String telephone;
}
效果如下:
5.在控制台输出swagger地址
package com.manage.api.config;
import lombok.extern.log4j.Log4j2;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Component
@Log4j2
@EnableSwagger2
@Configuration
public class SwaggerPrintConfig implements ApplicationListener<WebServerInitializedEvent> {
@Override
public void onApplicationEvent(WebServerInitializedEvent event) {
//获取IP
String hostAddress = "127.0.0.1";
//获取端口号
int port = event.getWebServer().getPort();
//获取应用名
String applicationName = event.getApplicationContext().getApplicationName();
//swagger3和swagger2的地址不一样
log.info("\n项目启动启动成功!接口文档地址: \n"+" http://"+hostAddress+":"+event.getWebServer().getPort()+applicationName+"/swagger-ui/index.html");
}
}
6.swagger页面设置名字
package com.manage.api.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
@Configuration
public class Swagger3 {
@Bean
public Docket docket() {
return new Docket(DocumentationType.OAS_30).apiInfo(
new ApiInfoBuilder()
.contact(new Contact("sunn", "", "2***@qq.com"))
.title("Swagger3测试项目")
.build()
);
}
}
7.运行代码成功
swagger页面
8.发现有多余的basic-error-controller,更改第6步的代码
package com.manage.api.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
@Configuration
public class Swagger3 {
@Bean
public Docket docket() {
return new Docket(DocumentationType.OAS_30).apiInfo(
new ApiInfoBuilder()
.contact(new Contact("sunn", "", "2769662613@qq.com"))
.title("Swagger3测试项目")
.build()
) .select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.build();
}
}
9.消除成功