参考文章:https://www.jianshu.com/p/2e8f66bcacbe
- 引入pom文件
注意:由于我这里使用了dubbo服务注册发现,所以这里是在消费者引入的也就是web工程
<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>
- swagger配置类
创建SwaggerConfig类
package com.skindow.config;
import com.google.common.base.Predicate;
import org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* Created by Administrator on 2019/8/19.
*/
@Configuration
@EnableSwagger2 // 启用 Swagger
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
Predicate<RequestHandler> predicate = new Predicate<RequestHandler>() {
@Override
public boolean apply(RequestHandler input) {
Class<?> declaringClass = input.declaringClass();
if (declaringClass == BasicErrorController.class)// 排除
{
return false;
}
if(declaringClass.isAnnotationPresent(RestController.class)) // 被注解的类
{
return false;
}
if(input.isAnnotatedWith(ResponseBody.class)) // 被注解的方法
{
return false;
}
return false;
}
};
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.skindow.controller")) //扫描控制层的路径
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Welcome to my blog") //标题
.description("only test swagger") //描述
.termsOfServiceUrl("https://blog.csdn.net/qq_42255763")
.contact(new Contact("skindow", "https://blog.csdn.net/qq_42255763", "295317224@qq.com"))//作者
.version("1.0")//版本
.license("The Apache License, Version 2.0")
.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
.build();
}
}
- 控制层添加swagger注解
常用注解
注解 | 说明 |
---|---|
@Api()用于类 | 表示标识这个类是swagger的资源。 tags–表示说明 value–也是说明,可以使用tags替代 但是tags如果有多个值,会生成多个list |
@ApiOperation()用于方法 | 表示一个http请求的操作。value用于方法描述 notes用于提示内容 tags可以重新分组(视情况而用) |
@ApiParam()用于方法,参数,字段说明 | 表示对参数的添加元数据(说明或是否必填等)name–参数名 value–参数说明 required–是否必填 |
@ApiModel()用于类 | 表示对类进行说明,用于参数用实体类接收。value–表示对象名 description–描述 |
@ApiModelProperty()用于方法,字段 | 表示对model属性的说明或者数据操作更改。value–字段说明 name–重写属性名字 dataType–重写属性类型 required–是否必填 example–举例说明 hidden–隐藏 |
@ApiIgnore()用于类,方法,方法参数 | 表示这个方法或者类被忽略,不被序列化 |
@ApiImplicitParam() 用于方法 | 表示单独的请求参数 |
@ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam | name–参数ming value–参数说明 dataType–数据类型 paramType–参数类型 example–举例说明 |
给控制层类添加swagger注解
package com.skindow.controller;
import com.skindow.service.DemoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import springfox.documentation.annotations.ApiIgnore;
/**
* Created by Administrator on 2019/8/7.
*/
@Controller
@Slf4j
@RequestMapping("/api/demo")
@Api("skindow-test")
public class DemoController {
@Autowired
private DemoService demoService;
@RequestMapping("/test")
@ResponseBody
@ApiIgnore//使用该注解忽略这个API
public String test()
{
return demoService.sayHello("skindow");
}
@RequestMapping("/testAop")
@ResponseBody
@ApiOperation(httpMethod = "GET", value = "测试AOP", consumes = "application/json")
public String testAop(@RequestParam(value="name") String name,@RequestParam(value="age") Integer age)
{
return demoService.sayHello(name,age);
}
@RequestMapping("/setRedis")
@ResponseBody
@ApiOperation(httpMethod = "GET", value = "给redis新建key-value", consumes = "application/json")
public String setRedis(@RequestParam(value="value") String value,@RequestParam(value="key") String key)
{
return demoService.testRedis(key,value);
}
@RequestMapping("/getRedis")
@ResponseBody
@ApiOperation(httpMethod = "GET", value = "在redis通过key获取value", consumes = "application/json")
public String getRedis(@RequestParam(value="key") String key)
{
return demoService.getValueByKey(key);
}
}
- 测试
先启动该工程
通过http://localhost:8092/swagger-ui.html 访问Swagger2的相关内容,这里的端口和web包的端口是一致的,就是你使用swagger的包启动工程的端口
初始页面如下
而我们配置控制层的api说明则在demo-controller
Demo Controller的隐藏页中,我们将其打开则会显示我们再控制层配置的说明如下
通过swagger2调用api
点击tye it out
之后会出现该页面让我们填写相应的参数
填完相应的参数之后点击excuter
返回状态为200代表成功且成功返回结果
项目地址:
https://github.com/skindowSyc/firstProject.git 对应tag swaggerDemo