1、SpringMvc篇
用到的pom如下
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version
</dependency>
说明:
1)、用swagger-bootstrap-ui替换springfox-swagger-ui,展示效果更友好。
详情可参考swagger-bootstrap-ui官网(doc.xiaominfo.com/guide/)
A、新建配置类,主要是生成Docket对象。通过enable变量控制生产环境(值为false)和测试环境(值为true)切换。
@Configuratdion
@EnableSwagger2
public class Swagger2Config {
//application.properties中配置swagger启用或者关闭
@Value("${swagger2.enable}")
private boolean enable;
@Bean
public Docket apis()
{
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxx.xxx"))
.build()
.enable(enable);
}
/**
* Author:
* Date: 2019/9/4 16:27
* Desc: api文档说明
* @return
*/
private ApiInfo apiInfo()
{
return new ApiInfoBuilder()
.title("xx系统接口文档")
.description("提供模块")
.contact(new Contact("自定义名称", "http://xxxx", "自定义邮箱"))
.version("1.0.0-SNAPSHOT")
.build();
}
B、配置Controller类
swaggerui通过调用后台的Controller生成json文件进行展示。 一些基本的注解就不具体介绍了。例子如下:
@RestController
@RequestMapping("log")
@Api(tags = "日志管理", value = "日志管理")
public class LogController {
@Resource
private ILogService logServiceImpl;
/**
* Desc: 返回查询列表数据
* @param
* @return
*/
@PostMapping("/showList")
@ApiOperation(value="返回列表数据", notes="")
public CommonRetVO<Page<LogVO>> list(@RequestBody LogQuery logQuery) {
return logServiceImpl.query(logQuery);
}
}
说明:
1、按照swagger的规范,特别是泛型,需要在Controller返回值中明确标出具体对象类型。
泛型对象在生成set方法的时候,参数是否是泛型,有些编辑器会默认Object,导致swaggerui展示不出来字段信息。
2、如果使用shiro,springsecurity等权限框架,需要放开/v2/**,/swagger-resources/**, /webjars/** 的swagger请求地址,否则被拦截后swaggerui依然显示不了。
基本按照以上配置就可以跑起来了,页面访问地址为http(s)://ip地址:端口/contextPath(或自定义servlet地址前缀)/doc.html
2、CXF篇
cxf采用3.3.3版本 ,提供RESTFul的Webservice接口。
用到的pom如下:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-service-description-swagger</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version
</dependency>
说明:
1)、后端主要是cxf-rt-rs-service-description-swagger来实现,前端仍然采用swagger-bootstrap-ui,由于ui是纯前端代码,需要依赖将后端生成的json文件处理后返回给ui ,所以需要引入pringfox-swagger2来实现。
2)、由于默认的swagger-ui的生成json的请求路径是/v2/api-docs,cxf生成的swagger的json路径依赖于{cxfservletpath}+{webservice的address}/swagger.json,只需要在springboot的applicatin.properties中配置swagger-ui的默认请求路径即可。比如:
springfox.documentation.swagger.v2.path=/cxfservletpath/webservice的address/swagger.json
,
其中cxfservletpath和webservice的address根据具体项目更改下即可。
A、新建配置类
@Configuration
public class ChildCxfConfig extends CxfConfig
{
//application.properties中配置Swagger2Feature启用或者关闭
@Value("${swagger2cxf.enable}")
private boolean enable;
@Override
protected List<Feature> getFeatureList() {
if (enable)
{
List<Feature> list=new ArrayList<Feature>();
Swagger2Feature swagger2Feature=new Swagger2Feature();
swagger2Feature.setTitle("RESTful WebService");
swagger2Feature.setPrettyPrint(true);
swagger2Feature.setDescription("RESTful Webservice API");
swagger2Feature.setVersion("1.0.0");
swagger2Feature.setBasePath("/xxx/xxxservice");
swagger2Feature.setResourcePackage("com.xxxx.service");
list.add(swagger2Feature);
return list;
}else
{
return null;
}
}
父类中
protected List<Feature> getFeatureList(){
return null;
}
@Bean
public Server busRestWebserviceConfig(){
JAXRSServerFactoryBean bean=new JAXRSServerFactoryBean();
...
List<Feature> featureList=this.getFeatureList();
if (null!=featureList && featureList.size()>0)
{
//设置Swagger2Feature
bean.setFeatures(featureList);
}
return bean.create();
}
这样基本配置就结束了。 剩下的工作需要在扫描包范围内的的实现类加上Swagger的注解即可,这里不再累述。 需要注意的是实现类上必须有@Path("/")注解 ,否则swaggerui也不生成接口文档,Path里的路径根据自己需要定义即可,最少是/。