Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务(官网地址:https://swagger.io/)。
Swagger只需要按照它底层的规范去定义接口及接口的相关信息,再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成在线接口调试页面等等。Swagger 是在开发阶段使用的框架,帮助后端开发人员做后端的接口测试
swagger的作用:
Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫Springfox。通过在项目中引入Springfox ,即可非常简单快捷的使用Swagger。这里可以参考青哥的一篇博客springboot继承swagger-ui。需要注意的是,使用的版本需要对应,不同的版本的注解,可能会存在细微的差距。
knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量,并且功能强悍!
(目前,一般都会使用knife4j框架)
knife4j的优点:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
WebMvcConfigurationSupport
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
/**
* 注册自定义拦截器
*
* @param registry
*/
@Override
protected void addInterceptors(InterceptorRegistry registry) {
// 添加自定义拦截器
// registry.addInterceptor(new MyInterceptor());
}
/**
* 通过knife4j生成接口文档
* @return
*/
@Bean
public Docket docket() {
ApiInfo apiInfo = new ApiInfoBuilder()
.title("测试接口文档")
.version("1.0")
.description("测试接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.knife.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
/**
* 设置静态资源映射
* @param registry
*/
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
/**
* 扩展Spring MVC框架的消息转化器
* @param converters
*/
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// 添加自定义消息转换器
//1.创建一个消息转换器对象
//2. 需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据
//3. 将自己的消息转化器加入容器中(消息转换器是有顺序地,而且里面还有很多的,索引0的作用就是把我们新加入的转换器放在第一个)
// converters.add(new MyMessageConverter());
}
}
通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:
注解 | 说明 |
---|---|
@Api | 用在类上,例如Controller,表示对类的说明 |
@ApiModel | 用在类上,例如entity、DTO、VO |
@ApiModelProperty | 用在属性上,描述属性信息 |
@ApiOperation | 用在方法上,例如Controller的方法,说明方法的用途、作用 |
@ApiModel注解是用在接口相关的实体类上的注解,它主要是用来对使用该注解的接口相关的实体类添加额外的描述信息。
@ApiModelProperty:添加在pojo类的属性上的注解,用于对请求参数或响应结果中的某个属性进行说明,主要通过其value属性配置描述文本,并可通过example属性配置示例值
以下是一个示例代码,展示了如何在Spring Boot中使用WebMvcConfigurationSupport类:
@Configuration
public class MyWebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
// 添加自定义拦截器
registry.addInterceptor(new MyInterceptor());
}
@Override
protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// 添加自定义消息转换器
converters.add(new MyMessageConverter());
}
}