springboot3.2.3如何集成swagger
springdoc-openapi库有助于使用 Spring Boot 项目自动生成 API 文档。 springdoc-openapi它的工作原理是在运行时检查应用程序,根据 spring 配置、类结构和各种注释推断 API 语义。自动生成 JSON/YAML 和 HTML 格式 API 文档。
如果你使用的是spring-boot v3版本,请使用springdoc-openapi v2版本。
参看:https://github.com/springdoc/springdoc-openapi
要在Spring Boot 3.2.3中集成Swagger,你可以按照以下步骤进行操作:
1.添加Swagger依赖到pom.xml文件中:
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>last-release-version</version>
</dependency>
2.创建一个Swagger配置类,用于配置Swagger的属性:
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI openAPI() {
return new OpenAPI().addSecurityItem(new SecurityRequirement().
addList("Bearer Authentication"))
.components(new Components().addSecuritySchemes
("Bearer Authentication", createAPIKeyScheme()))
.info(new Info().title("Scaffold API")
.description("description of Scaffold API.")
.version("1.0").contact(new Contact().name("yunzhiliu")
.email("1360194505@qq.com").url("salloszraj@gmail.com"))
.license(new License().name("License of API")
.url("API license URL")));
}
private SecurityScheme createAPIKeyScheme() {
return new SecurityScheme().type(SecurityScheme.Type.HTTP)
.bearerFormat("JWT")
.scheme("bearer");
}
}
3.在application.properties或application.yml文件中配置Swagger相关属性:
# swagger-ui custom path
springdoc.swagger-ui.path=/swagger-ui.html
4.在controller中的代码机上如下的代码
@Tag(name = "AddressBookController", description = "AddressBookController")
@RestController
@RequestMapping("/addressBook")
public class AddressBookController {
Logger logger = LoggerFactory.getLogger(AddressBookController.class);
@Autowired
private AddressBookService addressBookService;
@Operation(summary = "save addressBookDto", description = "save addressBookDto")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "save addressBookDto successfully"),
@ApiResponse(responseCode = "500", description = "save addressBookDto failed")
})
@PostMapping("/save")
public Result<AddressBook> save(@Parameter(description = "addressBookDto")
@RequestBody @Valid AddressBookDto addressBookDto, BindingResult bindingResult) {
AddressBook addressBook = new AddressBook();
BeanUtils.copyProperties(addressBookDto, addressBook);
return Result.success(addressBookService.save(addressBook));
}
}
5.在对应的实体类中加入注解
@Data
@Entity
@Table(name = "address_book")
public class AddressBook {
// todo 记录 after-saving-the-identifier-must-not-be-null-error 报错,在这里加上@Id即可
@Schema(description = "AddressBook ID")
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Schema(description = "用户id")
//用户id
private Long userId;
@Schema(description = "收货人 或 雇员名称")
//收货人 或 雇员名称
private String consignee;
//手机号
@Schema(description = "手机号")
private String phone;
//性别 0 女 1 男
@Schema(description = "性别 0 女 1 男")
private String sex;
//省级区划编号
@Schema(description = "省级区划编号")
private String provinceCode;
//省级名称
@Schema(description = "Username")
private String provinceName;
//市级区划编号
@Schema(description = "省级名称")
private String cityCode;
//市级名称
@Schema(description = "市级名称")
private String cityName;
//区级区划编号
@Schema(description = "区级区划编号")
private String districtCode;
//区级名称
@Schema(description = "区级名称")
private String districtName;
//详细地址
@Schema(description = "详细地址")
private String detail;
//标签 比如 公司、家
@Schema(description = "标签 比如 公司、家")
private String label;
// todo 将数据类型从tinyint(1)改为int 或将tinyint(1)改为tinyint(4) No converter found capable of converting from type [java.lang.Boolean] to type [java.lang.Integer] 先百度,没有找到答案。然后认为是
// todo 转换器的问题,翻看spring官网没有找到相应的内容 最后还是debug,发现是数据类型的问题 Mysql中,如果使用tinyint来设置字段的数据类型,映射到Java数据类型中,不仅可以使用上面的Boolean类型来接收,也可以使用Java中int类型来接收。在MySQL中存储的tinyint(1)类型数据,不仅可以存储0和1,任意一个一位自然数都可以(0-9)。不过,当这样(tinyint(1))使用时,0映射为Java中的Boolean类型false,1-9数字都将映射为true
//是否默认 0 否 1是
@Schema(description = "是否默认 0 否 1是")
private Integer isDefault;
//创建时间 todo 这里没有加入类似于@TableField(fill = FieldFill.INSERT)的代码,以后可以改进
@Schema(description = "创建时间")
private LocalDateTime createTime;
//更新时间
@Schema(description = "更新时间")
private LocalDateTime updateTime;
//创建人
@Schema(description = "创建人")
private Long createUser;
//修改人
@Schema(description = "修改人")
private Long updateUser;
//是否删除
@Schema(description = "是否删除")
private Integer isDeleted;
}
6.启动项目后,访问http://localhost:${server.port}/${spring.application.name}/swagger-ui/index.html即可查看生成的API文档。
点开其中的一个,点击写入参数,点击execute,即可测试
以上是在Spring Boot 3.2.3中集成Swagger的基本步骤,具体的配置和使用方式可以根据实际需求进行调整。希望对你有所帮助!