# iuyy-api-doc
**Repository Path**: iuyy_net/iuyy-api-doc
## Basic Information
- **Project Name**: iuyy-api-doc
- **Description**: 用来生成 API 文档及 API 测试,简单易用,无代码侵入。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/iuyy_net/iuyy-api-doc
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2020-05-12
- **Last Updated**: 2021-03-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# iuyy-api-doc
### 介绍
其于Spring框架,项目会自动扫描 controller 的注解,生成 API 文档。
增加了 API 测试功能。
简单易用。
### 软件架构
基于Spring框架。
### 使用说明
##### 1、添加依赖
```xml
net.iuyy
iuyy-api-doc
1.5
```
##### 2、添加配置文件
```java
@Configuration
@ApiDoc(basePackages = "net.iuyy.demo.controller")
public class ApiDocConfig {
@Bean
public ServletRegistrationBean apiDocServlet() {
ServletRegistrationBean registrationBean = new ServletRegistrationBean(new ApiDocServlet(), "/api/doc/*");
registrationBean.setLoadOnStartup(1);
return registrationBean;
}
}
```
##### 3、添加注解(非必需)
> 注:如果想在接口文档页面看到更详细的返回值结构,请添加此注解。
示例:
```java
@RestController
@RequestMapping("blog")
public class BlogApi {
@Autowired
private BlogService blogService;
@GetMapping()
@ReturnType(value = "java.util.List")
public JsonResult getAll(){
return new JsonResult(blogService.getAll());
}
@GetMapping("/{id}")
@ReturnType(value = "net.iuyy.demo.bean.Blog")
public JsonResult getOneById(@PathVariable("id") Integer id){
return new JsonResult(blogService.getOneById(id));
}
@PostMapping()
public JsonResult update(@RequestBody Blog blog){
return blogService.update(blog) ? JsonResult.SUCCESS : JsonResult.FAILED;
}
@PutMapping()
public JsonResult add(@RequestBody Blog blog){
return blogService.add(blog) ? JsonResult.SUCCESS : JsonResult.FAILED;
}
@DeleteMapping("/{id}")
public JsonResult delete(@PathVariable("id") Integer id){
return blogService.delete(id) ? JsonResult.SUCCESS : JsonResult.FAILED;
}
// 单个文件上传
@PostMapping("/upload")
@UploadFileApi(fileName = "file")
@ReturnType(value = "java.lang.String")
public JsonResult upload(MultipartFile file){
String filePath = "";
// to do something...
return new JsonResult(filePath);
}
// 多个文件上传
@PostMapping("/uploadMulti")
@UploadFileApi(isSingleFile = false)
@ReturnType(value = "java.util.List")
public JsonResult uploadMulti(StandardMultipartHttpServletRequest request){
List filePathList = new ArrayList<>();
for(MultipartFile file : request.getFileMap().values()) {
// to do something...
}
return new JsonResult(filePathList);
}
}
```
其中:
```java
public class JsonResult implements Serializable {
private static final int SUCCESS_CODE = 200;
private static final String SUCCESS_MSG = "SUCCESS";
private static final int FAILED_CODE = 500;
private static final String FAILED_MSG = "FAILED";
public static final JsonResult SUCCESS = new JsonResult(SUCCESS_CODE, SUCCESS_MSG);
public static final JsonResult FAILED = new JsonResult(FAILED_CODE, FAILED_MSG);
private Integer code;
private String msg;
private Object data;
public JsonResult(){}
public JsonResult(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public JsonResult(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public JsonResult(Object data) {
this.code = SUCCESS_CODE;
this.msg = SUCCESS_MSG;
this.data = data;
}
// getters、setters...
}
```
### 注解详细使用说明:
#### 1、@ReturnType
- key为空,value只能有一个值,且对应返回值对象的字段中第一个为Object类型的字段。
> 例:@ReturnType(value = "java.util.List")
- key没有加前缀
> 例1:@ReturnType(key = "data", value = "java.util.List")
>
> JsonResult:data --> java.util.List
>
>
>
> 例2:@ReturnType(key = "body, header",
>
> value = "net.iuyy.demo.dto.UserDto, net.iuyy.demo.bean.ResponseHeader")
>
> JsonResponse:body --> net.iuyy.demo.dto.UserDto
>
> JsonResponse:header --> net.iuyy.demo.bean.ResponseHeader
- key有一个前缀(之间用冒号相连)
> 例:@ReturnType(key = "JsonResult:data", value = "java.util.List")
- key有多个前缀
> 例1:@ReturnType(key = "JsonResult:data, UserDto:extraInfo",
>
> value = "net.iuyy.demo.dto.UserDto, net.iuyy.demo.bean.UserExtra")
>
> JsonResult:data --> net.iuyy.demo.dto.UserDto
>
> UserDto:extraInfo --> net.iuyy.demo.bean.UserExtra
>
>
>
> 例2:@ReturnType(key = "JsonResult:data, JsonResult:header",
>
> value = "net.iuyy.demo.dto.UserDto, net.iuyy.demo.bean.ResponseHeader")
>
> JsonResult:data --> net.iuyy.demo.dto.UserDto
>
> JsonResult:header --> net.iuyy.demo.bean.ResponseHeader
#### 2、@UploadFileApi
1)单文件上传
> isSingleFile: 默认为true,即默认为单文件上传
>
> fileName:单文件上传情况下,此值不能为空。
>
> 例:
>
> ```java
> @PostMapping("/upload")
> @UploadFileApi(fileName = "file")
> @ReturnType(value = "java.lang.String")
> public JsonResult upload(MultipartFile file){
> String filePath = "";
> // to do something...
> return new JsonResult(filePath);
> }
> ```
>
2)多文件上传
> isSingleFile: false
>
> fileName:多文件上传情况下,此值可以为空。
>
> 例:
>
> ```java
> @PostMapping("/uploadMulti")
> @UploadFileApi(isSingleFile = false)
> @ReturnType(value = "java.util.List")
> public JsonResult uploadMulti(StandardMultipartHttpServletRequest request){
> List filePathList = new ArrayList<>();
> for(MultipartFile file : request.getFileMap().values()) {
> // to do something...
> }
> return new JsonResult(filePathList);
> }
> ```
### 主界面说明
Put 请求接口详细:

Get 请求接口详细:

其余的都类似,就不一一贴图了。
Get 请求接口测试:

Post 请求接口测试:

### 版本说明
#### v1.0
1、接口文档自动生成。
2、自定义返回值注解(@ReturnType)
3、接口文档访问页面(服务IP:服务端口/api/doc/)
#### v1.1
1、新增接口测试功能。
2、调整了页面布局。
3、修复部份Bugs。
#### v1.2
1、修复部份Bugs。
#### v1.3
1、新增文件上传注解(@UploadFileApi)。
2、支持文件上传接口测试。
#### v1.5
1、重构项目启动时的包扫描。
2、修复一些Bugs。
### Build Setup
``` bash
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
```