Swagger概述

Swagger是一组围绕OpenAPI规范构建的开源工具,可帮助设计、构建、记录和使用REST API。
简单说下,它的出现就是为了方便进行测试后台的restful形式的接口,实现动态的更新,当我们在后台的接口
修改了后,swagger可以实现自动的更新,而不需要认为的维护这个接口进行测试。

Swagger2 配置

需要在你的SpringBoot工程中加入如下pom

<!-- swagger2 配置 -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.4.0</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.4.0</version>
		</dependency>

在配置好pom文件之后,我们需要开启Swagger2,我们可以使用两种方式来实现。第一种直接在启动类上加入@EnableSwagger2注解,即可
第二种则是新建配置类来自定义一些Swagger2的属性,如下

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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class Swagger2 {
	
	@Bean
	public Docket createRestApi() {
		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
				.apis(RequestHandlerSelectors.basePackage("com.imooc.controller"))
				.paths(PathSelectors.any()).build();
	}

	/*
	 * @Description: 构建 api文档的信息
	 */
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
                // //大标题
                .title("测试系统 RESTful API")
                // 版本号
                .version("2.0")
//                .termsOfServiceUrl("NO terms of service")
                // 描述
                .description("API 描述")
                //作者
                .contact(new Contact("zhao", "", "1182867739@qq.com"))
//                .license("The Apache License, Version 2.0")
//                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                .build();

	}
}

在我们的Controller和Model中加入一些Swagger2的注解配置

@RestController
@Api(value="用户注册登录接口",tags="登录注册controller")
public class RegistLoginController {

	@Autowired
	UserService userService;
	@PostMapping(value="/regist")
	@ApiOperation(value="用户注册",notes="注册接口")
	public IMoocJSONResult regist(@RequestBody Users users){
		if (StringUtils.isBlank(users.getUsername())||StringUtils.isBlank(users.getPassword())) {
			return IMoocJSONResult.errorMsg("用户名或密码不能为空");
		}
		if (userService.queryUsernameIsExist(users.getUsername())) {
			return IMoocJSONResult.errorMsg("该用户名已存在,请重新注册");
		}else {
			userService.saveUser(users);
		}
		return IMoocJSONResult.ok();
	}
}

Model配置

@ApiModel(value="用户对象",description="这是用户对象")
public class Users {
    @Id
    @ApiModelProperty(hidden=true)
    private String id;

    /**
     * 用户名
     */
    @ApiModelProperty(value="用户名",name="username",example="imooc",required=true)
    private String username;

    /**
     * 密码
     */
    @ApiModelProperty(value="密码",name="password",example="123456",required=true)
    private String password;

    /**
     * 我的头像,如果没有默认给一张
     */
    @Column(name = "face_image")
    @ApiModelProperty(hidden=true)
    private String faceImage;

    /**
     * 昵称
     */
    private String nickname;

    /**
     * 我的粉丝数量
     */
    @Column(name = "fans_counts")
    @ApiModelProperty(hidden=true)
    private Integer fansCounts;

    /**
     * 我关注的人总数
     */
    @Column(name = "follow_counts")
    @ApiModelProperty(hidden=true)
    private Integer followCounts;

    /**
     * 我接受到的赞美/收藏 的数量
     */
    @Column(name = "receive_like_counts")
    @ApiModelProperty(hidden=true)
    private Integer receiveLikeCounts;

使用上述注解可义定义在传入参数时,是否必须传入等属性 。

Swagger常用注解

swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等。

  • @Api:修饰整个类,描述Controller的作用
  • @ApiOperation:描述一个类的一个方法,或者说一个接口
  • @ApiParam:单个参数描述
  • @ApiModel:用对象来接收参数
  • @ApiProperty:用对象接收参数时,描述对象的一个字段
  • @ApiResponse:HTTP响应其中1个描述
  • @ApiResponses:HTTP响应整体描述
  • @ApiIgnore:使用该注解忽略这个API
  • @ApiError :发生错误返回的信息
  • @ApiParamImplicitL:一个请求参数
  • @ApiParamsImplicit 多个请求参数
    需要注意的时上述的参数注解在后续的版本中已经修改了,这个要引起注意

Swagger错误java.lang.NoClassDefFoundError: io/swagger/models/Contact

这个错误我基本断定与Swagger版本和SpringBoot携带的Spring版本有关,上述Swagger2.4.0的无法与SpringBoot2版本配合使用,因此在我们后续的使用中需要注意版本的配合关系