Springboot2.x整合Swagger3.x+knife4j3.x

目录

一、SpringBoot添加pom文件依赖

二、创建配置类

 三、接口文档配置

五、APiModel和ApiModelProperty传参对象注解

 六、Swagger3.x响应接口和测试面板

七、离线文档导出


一、SpringBoot添加pom文件依赖

<dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-boot-starter</artifactId>
      <version>3.0.0</version>
</dependency>

配置文件增加配置 application.properties

spring.application.name=userService
​
# ===== 自定义swagger配置 ===== #
swagger.enable=true
swagger.application-name= ${spring.application.name}
swagger.application-version=1.0
swagger.application-description=用户接口服务

二、创建配置类

import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Component
@EnableOpenApi
@ConfigurationProperties("swagger")
@Data
public class SwaggerConfiguration{
​
​
    /**
     * 是否开启swagger,生产环境一般关闭,所以这里定义一个变量
     */
    private Boolean enable;
​
    /**
     * 项目应用名
     */
    private String applicationName;
​
    /**
     * 项目版本信息
     */
    private String applicationVersion;
​
    /**
     * 项目描述信息
     */
    private String applicationDescription;
​
  
   
     @Bean
    public Docket docket() {
        return new Docket(DocumentationType.OAS_30)
                .pathMapping("/")
​
                // 定义是否开启swagger,false为关闭,可以通过变量控制,线上关闭
                .enable(enable)
​
                //配置api文档元信息
                .apiInfo(apiInfo())
​
                // 选择哪些接口作为swagger的doc发布
                .select()
​
                //apis() 控制哪些接口暴露给swagger,
                // RequestHandlerSelectors.any() 所有都暴露
                // RequestHandlerSelectors.basePackage("net.iflytek.*")  指定包位置
                // withMethodAnnotation(ApiOperation.class)标记有这个注解 ApiOperation
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
​
                .paths(PathSelectors.any())
​
                .build();
    }
​
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(applicationName)
                .description(applicationDescription)
                .contact(new Contact("www.baidu.com", "wwww.baidu.com", "12345678@qq.com"))
                .version(applicationVersion)
                .build();
    }
    
  }
 

 访问连接 端口号根据自己定义的来改:http://localhost:8081/swagger-ui/index.html

 三、接口文档配置

 @Api 模块配置,用在controller类,描述API接口

 @Api(tags = "用户模块",value = "用户UserController")
    public class UserController {
    }

@ApiOperation 接口配置,用在方法上,描述接口方法

   @ApiOperation("分页用户列表")
    @GetMapping("list")
    public JsonData list(){
​
        return JsonData.buildSuccess();
    }

 @ApiParam 方法参数配置,用在入参上面,描述参数

 @ApiOperation("用户登录")
    @PostMapping("login")
    public JsonData login(
            @ApiParam(name = "phone", value = "手机号",example = "13888888888")
            @RequestParam("phone") String phone,
​
            @ApiParam(name = "pwd", value = "密码",example = "123456")
            @RequestParam("pwd")String pwd){
​
        return JsonData.buildSuccess();
    }

@ApiIgnore 忽略此接口不生成文档

  @ApiIgnore
    @ApiOperation("删除用户")
    @DeleteMapping("/delete/{id}")
    public JsonData  deleteById(@PathVariable int id) {
        return JsonData.buildSuccess();
    }

五、APiModel和ApiModelProperty传参对象注解

 @ApiOperation("新增用户")
    @PostMapping("save")
    public JsonData save(@RequestBody SaveUserRequest userRequest){

        return JsonData.buildSuccess();
    }
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "新增用户请求模型")
@Data
public class SaveUserRequest {

    @ApiModelProperty(value = "主键")
    private int id;

    @ApiModelProperty(value = "邮箱",required = true,example = "123456789@qq.com")
    private String email;

    @ApiModelProperty(value = "手机号",required = false)
    private String phone;

    private  String name;

}

 

 六、Swagger3.x响应接口和测试面板

@ApiResponse 描述接口响应

    @ApiOperation("用户登录")
    @PostMapping("login")
    @ApiResponses({
            @ApiResponse(responseCode = HttpCodeStatus.REDIRECT, description = "重定向,跳转登录"),
            @ApiResponse(responseCode = "403",description = "没权限"),
    })
    public JsonData login(
            @ApiParam(name = "phone", value = "手机号",example = "13888888888")

            @RequestParam("phone") String phone,

            @ApiParam(name = "pwd", value = "密码",example = "123456")
            @RequestParam("pwd")String pwd){

        return JsonData.buildSuccess();
    }

 

接口测试: 接口测试调用一般都使用postman swagger用的不多

点击try it out .然后再填入对应参数 点击Execute执行即可 

 使用过程注意事项:

明确接口的Http请求方式 一个接口使用@RequestMapping会生成多个文档

 

@ApiOperation("轮播列表")
@RequestMapping("list")
public JsonData list(){

    List<BannerDO> list = bannerService.list();

    return JsonData.buildSuccess(list);
}

所以,要使用明确接口的Http请求方式。@PostMapping,@GetMapping,@DeleteMapping

七、离线文档导出

Swagger为我们提供了方便的在线文档支持,但某些场景下我们需要把接口文档提供给合作人员,而不是直接给一个地址。此时,我们就需要将接口文档导出为离线文档。

这里集成增强文档knife4j来实现离线文档的导出。

在pom.xml中增加knife4j的依赖:

<dependency>
			<groupId>com.github.xiaoymin</groupId>
			<artifactId>knife4j-spring-boot-starter</artifactId>
			<version>3.0.2</version>
		</dependency>

在上面配置Swagger的Swagger3Config中添加@EnableKnife4j注解,该注解可以开启knife4j的增强功能。

访问地址: http://localhost:8081/doc.html。

 此时启动项目,访问doc.html之后,你会发现现在文档风格变得非常酷炫

离线文档下载地址:

 下载下来的文档:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值