1.引入swagger依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
2.编写swagger配置文件
package com.xuecheng.api.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
//
@Configuration
@EnableSwagger2
public class Swagger2Configuration {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.xxx"))//扫描哪个包下的api
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("文档名称")
.description("文档描述")
// .termsOfServiceUrl("/")
.version("1.0")
.build();
}
}
3.api注解说明
在Java类中添加Swagger的注解即可生成Swagger接口,常用Swagger注解如下:
- @Api:修饰整个类,描述Controller的作用
- @ApiOperation:描述一个类的一个方法,或者说一个接口
- @ApiParam:单个参数描述
- @ApiModel:用对象来接收参数
- @ApiModelProperty:用对象接收参数时,描述对象的一个字段
- @ApiResponse:HTTP响应其中1个描述
- @ApiResponses:HTTP响应整体描述
- @ApiIgnore:使用该注解忽略这个API
- @ApiError :发生错误返回的信息
- @ApiImplicitParam:一个请求参数
- @ApiImplicitParams:多个请求参数
其中@ApiImplicitParam可以添加多个属性
4.举例
package com.xuecheng.api.cms;
import com.xuecheng.framework.domain.cms.CmsPage;
import com.xuecheng.framework.domain.cms.request.QueryPageRequest;
import com.xuecheng.framework.domain.cms.response.CmsPageResult;
import com.xuecheng.framework.model.response.QueryResponseResult;
import com.xuecheng.framework.model.response.ResponseResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@Api(value="cms页面管理接口",description = "cms页面管理接口,提供页面的增、删、改、查")
public interface CmsPageControllerApi {
//页面查询
@ApiOperation("分页查询页面列表")
@ApiImplicitParams({
@ApiImplicitParam(name="page",value = "页码",required=true,paramType="path",dataType="int"),
@ApiImplicitParam(name="size",value = "每页记录数",required=true,paramType="path",dataType="int")
})
QueryResponseResult findList(int page, int size, QueryPageRequest queryPageRequest);
//新增页面
@ApiOperation("新增页面")
CmsPageResult add(CmsPage cmsPage);
//根据页面id查询页面信息
@ApiOperation("根据页面id查询页面信息")
@ApiImplicitParams({
@ApiImplicitParam(name="id",value = "查询id",required=true,paramType="query",dataType="String")
})
CmsPage findById(String id);
//修改页面
@ApiOperation("修改页面")
CmsPageResult edit(String id,CmsPage cmsPage);
//删除页面
@ApiOperation("删除页面")
ResponseResult delete(String id);
}
5.访问:http://localhost:8066/swagger-ui.html
6.微服务zuul中使用swagger
6.1 各个微服务中的配置和上面一致
6.2 zuul中需要增加配置
@Configuration //通过configuration注解自动注入配置文件
@EnableSwagger2 //开启swagger功能
@Primary //如果有多个配置文件,以这个为准
//实现SwaggerResourcesProvider,配置swagger接口文档的数据源
public class SwaggerConfig implements SwaggerResourcesProvider {
//RouteLocator可以根据zuul配置的路由列表获取服务
private final RouteLocator routeLocator;
public SwaggerConfig(RouteLocator routeLocator) {
this.routeLocator = routeLocator;
}
//这个方法用来添加swagger的数据源
@Override
public List<SwaggerResource> get() {
List resources = new ArrayList<>();
//user:各个微服务api文档名称;/api/user/和zuul中的路由配置对应
resources.add(swaggerResource("user", "/api/user/v2/api-docs", "2.0"));
resources.add(swaggerResource("auth", "/api/auth/v2/api-docs", "2.0"));
return resources;
}
private SwaggerResource swaggerResource(String name, String location, String version) {
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(name);
swaggerResource.setLocation(location);
swaggerResource.setSwaggerVersion(version);
return swaggerResource;
}
}
网友评论