强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan
【前言】
前后端分离是现在系统的主流,前端人员更多专注于前端功能,后端人员更加关注后端极大提高开发效率;一般情况下前后端由不同的开发团队进行开发;所以免不了要有一份接口文档,手写接口文档,维护接口文档团队间沟通,调试等也是需要花费一定的时间,Swagger就在一定程度上解决了以上问题;今天将自己的项目集成Swagger;
【集成Swagger之路】
一、Springboot集成Swagger的方式
1、Pom中增加相关依赖
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${springfox-swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${springfox-swagger-ui.version}</version>
</dependency>
2、增加Swagger配置类
package com.zhanghan.zhboot.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
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;
/**
* Swagger2配置类
* 在与spring boot集成时,放在与Application.java同级的目录下。
* 通过@Configuration注解,让Spring来加载该类配置。
* 再通过@EnableSwagger2注解来启用Swagger2。
*/
@Configuration
@EnableSwagger2
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")
public class SwaggerConfig {
//定义扫描的controller的路径
private final static String controllerPath = "com.zhanghan.zhboot.controller";
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 本例采用指定扫描的包路径来定义指定要建立API的目录。
*
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage(controllerPath))
.paths(PathSelectors.any())
.build();
}
/**
* 创建该API的基本信息(这些基本信息会展现在文档页面中)
* 访问地址:http://项目实际地址/swagger-ui.html
*
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("springboot集成swagger")
.description("简单优雅的restfun风格,https://blog.csdn.net/zhanghan18333611647")
.termsOfServiceUrl("https://blog.csdn.net/zhanghan18333611647")
.version("1.0")
.build();
}
}
3、application中增加Swagger开关(此开关为true则代表启用Swagger;false则不启用Swagger;一般为安全起见生产环境置为false)
#****************************swagger***************************
#true is display swagger; false not disply swagger
swagger.enable=true
4、controller中增加相关的Swagger描述
package com.zhanghan.zhboot.controller;
import com.mysql.jdbc.StringUtils;
import com.zhanghan.zhboot.controller.request.MobileCheckRequest;
import com.zhanghan.zhboot.properties.MobilePreFixProperties;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@Api(value = "校验手机号控制器",tags = {"校验手机号控制器"})
public class CheckMobileController {
@Autowired
private MobilePreFixProperties mobilePreFixProperties;
@ApiOperation(value="优雅校验手机号格式方式",tags = {"校验手机号控制器"})
@RequestMapping(value = "/good/check/mobile", method = RequestMethod.POST)
public Map goodCheckMobile(@RequestBody @Validated MobileCheckRequest mobileCheckRequest) {
String countryCode = mobileCheckRequest.getCountryCode();
String proFix = mobilePreFixProperties.getPrefixs().get(countryCode);
if (StringUtils.isNullOrEmpty(proFix)) {
return buildFailResponse();
}
String mobile = mobileCheckRequest.getMobile();
Boolean isLegal = false;
if (mobile.startsWith(proFix)) {
isLegal = true;
}
Map map = new HashMap();
map.put("code", 0);
map.put("mobile", mobile);
map.put("isLegal", isLegal);
map.put("proFix", proFix);
return map;
}
@ApiOperation(value="扩展性差校验手机号格式方式",tags = {"校验手机号控制器"})
@RequestMapping(value = "/bad/check/mobile", method = RequestMethod.POST)
public Map badCheckMobile(@RequestBody MobileCheckRequest mobileCheckRequest) {
String countryCode = mobileCheckRequest.getCountryCode();
String proFix;
if (countryCode.equals("CN")) {
proFix = "86";
} else if (countryCode.equals("US")) {
proFix = "1";
} else {
return buildFailResponse();
}
String mobile = mobileCheckRequest.getMobile();
Boolean isLegal = false;
if (mobile.startsWith(proFix)) {
isLegal = true;
}
Map map = new HashMap();
map.put("code", 0);
map.put("mobile", mobile);
map.put("isLegal", isLegal);
map.put("proFix", proFix);
return map;
}
private Map buildFailResponse() {
Map map = new HashMap();
map.put("code", 1);
map.put("mobile", "");
map.put("isLegal", false);
map.put("proFix", "");
return map;
}
}
5、请求实体中增加相关的Swagger描述
package com.zhanghan.zhboot.controller.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@ApiModel("手机号校验请求实体")
@Data
public class MobileCheckRequest {
@ApiModelProperty(value = "国家编码",required = true)
@NotNull
private String countryCode;
@ApiModelProperty(value = "手机号",required = true)
@NotNull
private String mobile;
}
二、效果展示
1、启动项目访问地址:http://localhost:8080/swagger-ui.html
2、Try it out
3、Execute
三、项目地址及代码版本:
1、地址:GitHub - dangnianchuntian/springboot: springboot
2、代码版本:1.1.0-Release
【总结】
1、充分利用好工具提高效率;
2、小工具有大用处,多去研究。