🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 Springfox是一个通过扫描代码提取代码中的信息,生成API文档的工具。 #### **OAS** API文档的规范化需求,导致了OpenAPI Specification的诞生; OAS是OpenAPI Specification的简称,可以翻译为OpenAPI规范,它是定义API的一种规范,它的前身是Swagger规范。 OAS定义了一种书写API的一种格式,大家通过遵从同一种格式规范达到API文档的统一。狭义上理解,它用于描述一整套API接口,包括一个接口是GET还是POST请求啊,有哪些参数哪些header等等,它在设计的时候通常是YAML格式,这种格式书写起来比较方便,而在网络中传输时又会以json形式居多,因为json的通用性比较强。OpenAPI Specification已经在2015年捐献给了Linux基金会,现在已经成为RESTful API的世界标准。 #### **Swagger** Swagger是一个工具、一个项目、一个流行的API开发框架(当然,我们上面也说了Swagger是规范,但是后面演变成了OAS),这个框架以OAS为基础,对整个API的开发周期都提供了相应的解决方案,是一个非常庞大的项目(包括Swagger Editor、Swagger UI、Swagger Codegen、Swagger Inspector)。 #### **Springfox** Springfox是践行OAS的一个项目,它将Swagger融合进流行的Spring框架,根据OpenAPI规范,帮助开发者自动生成API文档。 因此,我们在Springboot项目只需要使用Springfox即可; ## 二、Springfox使用(基于最新V3) 1、首先加入依赖: ``` <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> ``` 2、在应用的主类上面,增加标注:@EnableOpenApi; ![](../../images/screenshot_1606789842223.png) 3、加入springFox的对象配置(可选,非必须); ``` @Configuration public class RaySwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30).pathMapping("/") // 定义是否开启swagger,false为关闭,可以通过变量控制 .enable(true) // 将api的元信息设置为包含在json ResourceListing响应中。 .apiInfo(apiInfo()) // 选择哪些接口作为swagger的doc发布 .select().apis(RequestHandlerSelectors.basePackage("com.ray.app").and(RequestHandlerSelectors.basePackage("org.ray.rayframework"))).paths(PathSelectors.any()).build().groupName("Rayframework") // 支持的通讯协议集合 .protocols(Set.of("https", "http")); } /** * API 页面上半部分展示信息 */ private ApiInfo apiInfo() { return new ApiInfoBuilder().version("1.0.0").title("Rayframework API接口文档").description("Rayframework Application").contact(new Contact("Rayframework", null, "4170804@qq.com")).build(); } } ``` 4、访问SwaggerUI: [http://localhost:8090/swagger-ui/index.html](http://localhost:8090/swagger-ui/index.html) 5、注解说明; @Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面 name:参数名 value:参数的汉字说明、解释 required:参数是否必须传 paramType:参数放在哪个地方 · header --> 请求参数的获取:@RequestHeader · query --> 请求参数的获取:@RequestParam · path(用于restful接口)--> 请求参数的获取:@PathVariable · body(不常用) · form(不常用) dataType:参数类型,默认String,其它值dataType="Integer" defaultValue:参数的默认值 @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息 code:数字,例如400 message:信息,例如"请求参数没填好" response:抛出异常的类 @ApiModel:用于响应类上,表示一个返回响应数据的信息 (这种一般用在post创建的时候,使用@RequestBody这样的场景, 请求参数无法使用@ApiImplicitParam注解进行描述的时候) @ApiModelProperty:用在属性上,描述响应类的属性