SpringBoot 集成 Swagger踩坑记录

添加依赖

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>2.0.4</version>
</dependency>

Swagger 配置

创建如下的配置类 Swagger2Config.java,@Configuration 使应用启动的时候就加载这个配置类,@EnableSwagger2 启用 swagger。

@Configuration
@EnableSwagger2
public class Swagger2Config {
    @Bean
    public Docket createRestApi() {
        TypeResolver typeResolver = new TypeResolver();
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .alternateTypeRules(
                        newRule(typeResolver.resolve(DeferredResult.class,
                                typeResolver.resolve(ResponseEntity.class, WildcardType.class)),
                                typeResolver.resolve(WildcardType.class)))
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.pactera.cr"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("人行征信").description("人行征信解析查询")
                .version("1.0").build();
    }
}

1. API 设计规范

下面是 OpenAPI 规范中建议的 API 基本路径设计规范。

https://api.example.com/v1/users?role=admin&status=active
\________________________/\____/ \______________________/
         server URL       endpoint    query parameters
                            path

server URL: 一般包含IP/域名、端口、版本。
endpoint path: 端点路径对应具体的接口方法。
query parameters: 请求参数

2. Swagger

Swagger是一个实现了OpenAPI(OpenAPI Specification)规范的工具集。OpenAPI是Linux基金会的一个项目,其目的是通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程。
Swagger工具集包含:

  • Swagger Editor(开源): Swagger Editor允许您在浏览器中编辑YAML中的OpenAPI规范并实时预览文档。
  • Swagger UI(开源): Swagger UI是HTML,Javascript和CSS资产的集合,可以从符合OAS标准的API动态生成漂亮的文档。
  • Swagger Codegen(开源):允许根据OpenAPI规范自动生成API客户端库(SDK生成),服务器存根和文档。
  • Swagger Inspector: API测试工具,可让您验证您的API并从现有API生成OpenAPI定义
  • SwaggerHub: API设计和文档,为使用OpenAPI的团队构建。

项目集成 knife4j(knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案),启动后通过 http://[ip]:[端口]/doc.html 路径可以访问API管理页面。

2.1 常用注解说明

注解示例描述
@Api@Api(value = “用户操作 API(v1)”, tags = “用户操作接口”)用在接口类上,为接口类添加描述。
@ApiOperation@ApiOperation(value = “新增用户”)用在方法上,未方法添加描述
@ApiModel@ApiModel(value = “用户对象”)描述一个实体对象
@ApiModelProperty@ApiModelProperty(value = “用户ID”, dataType = ,required = true, example = “1000”)描述属性信息,执行描述,是否必须,给出示例
@ApiParam@ApiParam(value = “用户名”, required = true)描述单个参数

2.2 注解使用示例

2.2.1 @Api

该注解将一个Controller(Class)标注为一个swagger资源(API)。该注解包含以下重要属性:

  • tags
    API分组标签,具有相同标签的API将会被归并在一组内展示。默认情况下同一个Controller下的接口在同一组内。
@RestController
@Api(tags = "文档管理接口")
public class DocumentController {
    ...
}

在这里插入图片描述


2.2.2 @ApiOperation

该注解用在方法上,说明方法的作用。该注解包含以下重要属性:

  • value
    方法名,显示在API文档的菜单中。
  • notes
    方法描述,显示在API文档对应的接口详情页中。
  • hidden
    hidden = true, 表示对应的接口不会显示在API文档中。
@GetMapping("/page")
@ApiOperation(value = "查询文档列表", notes = "xxxx接口发布说明")
public Response<IPage<Document>> page(@RequestBody Page<Document> page , @RequestHeader HttpHeaders header) {
    ...
}

在这里插入图片描述


2.2.3 @ApiModel 和 @ApiModelProperty

@ApiModel用在实体类Model上,标记该类为Swagger的解析类。
@ApiModelProperty用在实体类的属性上,用于描述属性信息。该注解包含以下重要属性:

  • value
    属性的简要说明
  • required
    是否为必传参数,false:非必传参数; true:必传参数
  • hidden
    隐藏模型属性,false:不隐藏; true:隐藏
  • example
    属性的示例值
@Data
@ApiModel
public class SendSingleSmsReq implements Serializable {

    @ApiModelProperty(value = "必输-调用流水号:产品编码+手机号+时间戳", required = true, example = "sms202008310000")
    @NotEmpty(message = "请输入调用流水号")
    private String serialNo;
    ...
}

在这里插入图片描述

2.3 接口测试

  1. 接口详情页面选择调试;
  2. 选择参数类型;
  3. 填写测试参数;
  4. 发送测试请求。
    在这里插入图片描述

3. 踩坑记录

乱码问题

问题描述: swagger API 管理页面中文乱码
解决方法:
修改 Springboot 的编码方式,解决 Controller 到页面的浏览器的乱码问题。

spring:
  http:
    encoding:
      charset: UTF-8
      force: true
      enabled: true

参数命名不规范问题

问题描述:
请求实体中属性的命名如果不符合驼峰命名规则,会导致@ApiModelProperty失效并且对应属性在API文档中会被强制转成驼峰命名的变量,同时后台也无法接收到命名不规范的参数。
如果由于某些特殊原因实体中的属性就是无法按照驼峰命名,该怎么办?
解决方法:
在成员变量上加上@JsonProperty注解并在它对应的get和set方法上加上@JsonIgnore注解

@JsonProperty("RequestParams")
@ApiModelProperty(value = "必输-业务参数", required = true)
private T RequestParams;

@JsonIgnore
public T getRequestParams() {
    return RequestParams;
}

@JsonIgnore
public void setRequestParams(T requestParams) {
    RequestParams = requestParams;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring Boot集成Swagger,你需要做以下几个步骤: 1. 首先,确保你使用的是Spring Boot 2.5.x及之前的版本。因为从Spring Boot 2.6.x开始,Swagger已经从Spring Boot中移除了。 2. 在你的Spring Boot应用中添加Swagger的依赖。在pom.xml文件中,添加以下依赖: ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 3. 在启动类上添加`@EnableSwagger2`注解。这个注解会启用Swagger的功能。你可以将这个注解直接添加到你的Spring Boot启动类上,或者创建一个单独的配置类,在配置类中添加这个注解。 4. 配置Swagger的相关属性。你可以在`application.properties`或`application.yml`文件中添加以下配置: ```yaml springfox.documentation.swagger.v2.path=/swagger springfox.documentation.swagger.ui.enabled=true ``` 这些配置将指定Swagger的路径和UI的启用状态。 5. 编写API文档。在你的控制器类中,使用Swagger的注解来描述你的API接口。例如,你可以使用`@Api`注解来给你的控制器类添加一个API的描述,<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringBoot教程(十六) | SpringBoot集成swagger(全网最全)](https://blog.csdn.net/lsqingfeng/article/details/123678701)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值