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的基本步骤,具体的配置和使用方式可以根据实际需求进行调整。希望对你有所帮助!

posted @ 2024-05-09 21:12  栓栓和霜霜  阅读(478)  评论(0编辑  收藏  举报