# smart-swagger
**Repository Path**: jay763190097/smart-swagger
## Basic Information
- **Project Name**: smart-swagger
- **Description**: 基于swagger的数据接口,通过源码注释生成文档,对源代码不产生任何污染。支持springmvc、springboot、jersey以及jfinal。支持map类型自定义注释注明返回的字段信息。
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2018-11-15
- **Last Updated**: 2024-08-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# smart-swagger
smart-swagger 改进了原来的swagger-doc,并适配jersey。在原来的基础上增加了相关注释规范
### 优点缺点对比
| 项目 | 代码污染 | 学习成本 | 支持springboot | 功能完善程度 |
| ------------- |:-------------:| -----:| -----:| -----:|
| smart-swagger | java原生注解即可 | 低 | 支持| 目前功能比较少|
| springfox | 污染比较大 | 高 | 支持 | 完善 |
## 快速开始
由于本项目还在构建中,所以没有扔到mvncenter,所以先通过mvn install 到本地仓库即可
### 1.安装到本地仓库
```shell
cd smart-swagger
mvn install
```
### 2.项目中使用
```xml
com.jay
swagger-jersey
1.3-SNAPSHOT
```
### 3.spring boot 配置
```java
@EnableSwaggerDoc
public class SampleApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(SampleApplication.class);
springApplication.run(args);
}
@Bean
public FilterRegistrationBean logFilterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new FilterInterceptor());
filterRegistrationBean.setName("logFilterRegistrationBean");
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
@Bean
public SwaggerDoc swaggerDoc() {
Contact contact = new Contact();
Info info = new Info();
info.setTitle("测试文档");
contact.setEmail("542467660@qq.com");
contact.setName("wk");
contact.setUrl("http://git.oschina.net/wangkang_daydayup/swagger-doc");
info.setDescription("swagger-doc解决了springfox用注解污染代码的问题,采用原生java-doc来实现文档的生成,让代码更加干净,学习成本更低");
info.setContact(contact);
return new SwaggerDoc.SwaggerDocBuilder().addSkipAnnotations(SessionAttribute.class).withDoc("doc")
.withSchemes(Scheme.HTTP)
.withDoc("测试文档").withInfo(info).withHost("139.224.35.224")
.addIgnoreControllers("swaggerController", "basicErrorController").build();
}
}
```
### 4.dubbo 配置
```xml
HTTP
E:\\Idea\\api-doc\\smart-swagger\\sample\\jersey2-swagger\\src\\main\\java
com.sf.vmap.order.service
com.sf.vmap.order.response
```
### 5. servlet(web)项目的配置
```java
public class StartSwagger extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
SwaggerDoc swaggerDoc = new SwaggerDoc.SwaggerDocBuilder()
.withTitle("测试文档")
.withHost("localhost:8081")
.withBasePath("/api")
.withContact("jiangmang.1992@163.com")
.withSchemes(Scheme.HTTP)
.withDescription("这是一个测试文档")
.withVersion("2.0.0")
.withScanAll(true)
.withResources("E:\\Idea\\api-doc\\smart-swagger\\sample\\jersey2-swagger\\src\\main\\java")
.withResourcePackages("com.jay.controller","com.jay.domain")
.withResourceCharset("utf-8")
.build();
new SwaggerSourceParse().realParse(swaggerDoc);
}
}
```
### 6. 注释规范
[注释规范文档](./wiki/doc.md)
### 7. 打包源码
这里是最重要的一点,因为java编译后会把doc擦除,这就是为什么class文件里面很少能看见注释,所以需要利用源码来进行解析,所以需要使用maven插件
```xml
org.apache.maven.plugins
maven-source-plugin
3.0.1
attach-sources
jar-no-fork
```
增加复制插件
```xml
maven-antrun-plugin
package
run
```
### 8. 搭建swagger-ui
下载最新版swagger-ui
https://github.com/swagger-api/swagger-ui
或者
https://gitee.com/cn-src/swagger-document-ui
使用nginx代理接口解决跨域问题
```editorconfig
server {
listen 9000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /services {
proxy_pass http://localhost:8888/services;
}
location /document/services {
proxy_pass http://localhost:8888/services;
}
}
```
### 9.效果图
### 10.测试链接
访问:http://10.118.63.128:9000/services/swagger/json 即可得到生成的json文件
用官方链接测试生成的json有无错误
http://petstore.swagger.io/?url=http://10.118.63.128:9000/services/swagger/json