忙着找工作,所以这段时间博客就搁置了,多线程也还没有继续往下,慢慢来吧,不断学习的过程才是快乐充实的。本章主要整合swagger2,话不多说,开始搞事情
swagger2
首先说明下什么是swagger2,作用是什么?
我们现在做java开发,由于前端的出现,导致我们越来越专注于后端(依稀还记得曾经前后端不分离,啥都干的情况)前后端分离,我们所做的事情更加专注。只需要提供数据接口,由前端调用就好了,但是有个问题是,当我们开发了接口,接口需要的参数,请求方式,返回值等等这些东西我们如何告知前端呢?
我用过的方式:口述,接口文档(word),apipost,showdoc,docway,swagger等等
口述,接口文档都不太靠谱,离职或者丢失啥都别玩了,谁记得住自己写的每一个接口参数。。。apipost,showdoc,docway这几个其实还是不错的,但是需要写完接口手动去编辑内容,最后就是swagger了
swagger是接口规范,swagger2是 Spring 生态系统的该规范的实现
它的作用就是接口实现文档化,让你更快的了解这个接口的作用,参数,返回值啥的
使用
第一步,导入依赖
<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>
第二步,配置文件的建立
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;
/**
1. swagger配置类
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//是否开启 (true 开启 false隐藏。生产环境建议隐藏)
//.enable(false)
.select()
//扫描的路径包,设置basePackage会将包下的所有被@Api标记类的所有方法作为api,自行更改自己的包路径,到controller就行了
.apis(RequestHandlerSelectors.basePackage("com.andy.user.controller"))
//指定路径处理PathSelectors.any()代表所有的路径
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//设置文档标题(API名称)
.title("SpringBoot中使用Swagger2接口规范")
//文档描述
.description("接口说明")
//服务条款URL
.termsOfServiceUrl("http://localhost:8080/")
//版本号
.version("1.0.0")
.build();
}
}
第三步: 将你需要展示的接口加上注解内容
@RestController
@RequestMapping(value = "/user")
@Api(value = "测试接口", tags = "用户管理相关的接口", description = "用户测试接口")
public class UserController {
@Autowired
UserService userService;
@RequestMapping("/update")
//方法参数说明,name参数名;value参数说明,备注;dataType参数类型;required 是否必传;defaultValue 默认值
@ApiImplicitParam(name = "userInfo", value = "修改用户数据")
//说明是什么方法(可以理解为方法注释)
@ApiOperation(value = "修改用户", notes = "修改用户")
public String updateUser(UserInfo userInfo){
userService.updateUser(userInfo);
return "修改成功";
}
@RequestMapping("/delete")
@ApiImplicitParam(name = "userInfo", value = "删除用户")
@ApiOperation(value = "删除用户", notes = "删除用户")
public String deleteUser(UserInfo userInfo){
userService.deleteUser(userInfo);
return "删除成功";
}
@RequestMapping("/queryUserAll")
@ApiOperation(value = "查询所有用户", notes = "查询所有用户")
public List<UserInfo> queryUserAll(){
// List<LogginInfo> logginInfos = logginFeign.queryAll();
return userService.queryUserAll();
}
好了,完成,就是这么简单,那么一起来看下效果:
启动后访问:localhost:端口/swagger-ui.html 这个地址固定的,不晓得能不能改,不过一般应该没有缺心眼去改这个吧,没有必要
一个接口为啥这么多?
我的接口只是使用@RequestMapping并没有指定访问方式,所以它就把所有的请求方式都列出来了。。。修改方式就是把@RequestMapping 访问方式写出来了。类上面有一个,方法上面也有一个,都可以去改,如果该类下所有的请求都是一种请求方式,比如post,那就再类上设置
好看多了,如果方法请求方式不一样,就在方法上面修改
自己对应自己的功能使用吧,接下来我们随便找个点开看下呢
可以看到,只有我写了注解的那个才有描述说明,其他字段都没有,其实这个userInfo并不是某个字段,而是对象的名称,所以我们把它注释掉,然后再实体里面去加注解 @ApiModelProperty
再启动:
字段的描述以及是否必传都有了
我们尝试请求一下:
执行后往下滑,会有相应结果
至此,swagger2常用的东西就差不多了,这个虽然写到了java里面,但是还是节约了编写文档的时间,也方便前端使用调试,节省交流的成本。项目中还是可以使用一下的