使用Swagger和SpringFox文档化Spring Boot REST API

  REST API非常重要。它是一个公共接口,其他模块、应用程序或开发人员需要使用它。拥有适当文档的界面以避免混淆并使其始终保持最新是至关重要的。

  最受欢迎的API文档规范之一是OpenApi,以前称为Swagger。它允许您使用JSON或YAML元数据描述API的属性。它还提供了一个Web UI,它可以将元数据转换为一个很好的HTML文档。此外,通过该UI,您不仅可以浏览有关API端点的信息,还可以将UI用作REST客户端 - 您可以调用任何端点,指定要发送的数据并检查响应。它非常方便。

  手动编写此类文档并在代码更改时保持更新是不现实的。这就是SpringFox发挥作用的地方。它是Spring Framework的Swagger集成。它可以自动检查您的类,检测控制器,它们的方法,它们使用的模型类以及它们映射到的URL。没有任何手写文档,只需检查应用程序中的类,它就可以生成大量有关API的信息。多么酷啊?最重要的是,每当您进行更改时,它们都会反映在文档中。

  添加依赖:

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
<scope>compile</scope>
</dependency>

激活Swagger2:

@SpringBootApplication
@EnableSwagger2
public class ProductApplication {

public static void main(String[] args) {
SpringApplication.run(ProductApplication.class, args);
}
}

Rest控制器:

@RestController
public class ProductController {

@Autowired
private ProductService productService;

@ApiOperation(value = "添加商品", nickname = "createProduct", notes = "备注", tags
= {"商品",})
@ApiResponses(value = {
@ApiResponse(code = 201, message = "创建成功!")})
@PostMapping(value = "/product")
public void createProduct(@ApiParam(value = "添加商品") @Valid @RequestBody
Product body) {
productService.create(body);

}

@PostMapping(value = "/category")
public void createCategory(@RequestBody
Category body) {
//productService.create(body);

}
}

createProduct是有详细中文说明,createCategory是默认的,两者显示API有所不同:

注意,Product作为输入参数,需要进行API定义,在Idea中有一个SwaggerGen插件,安装好后,在Product类中右键选择generate,会有generate swagger选项:

这样就会为你的模型对象自动生成swagger注解:

@ApiModel(value = "商品", description = "用于实现商品管理")
@Entity
public class Product {

@ApiModelProperty(value = "目录")
@OneToOne
public Category m_Category;

@ApiModelProperty(value = "标识")
@javax.persistence.Id
private String Id;

@ApiModelProperty(value = "名称")
private String name;

 

启动Spring Boot应用,访问:

http://localhost:8080/swagger-ui.html

显示如下:

上面一个“商品”是ProductController的方法createProduct是有详细中文说明,下面一个显示“product-controller”是createCategory方法,虽然这个方法没有任何Swagger2元注释,但是也自动生成了,名称直接为REST控制器名称。

重要的是,填入提交数据,可以类似postman那样对你的REST API进行数据提交,这样前端小伙伴再也不抱怨你的API不能用了:

访问

http://localhost:8080/v2/api-docs

会生成json格式的API说明,能够导入前端mock工具供前端调试编程。

API文档先行还是API编码先行?

#swagger   #API     

Spring Boot