实战项目-SwaggerUI使用

https://www.cnblogs.com/jockming/p/12233433.html

1:认识Swagger

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

作用:

1. 接口的文档在线自动生成。

2. 功能测试。

Swagger是一组开源项目,其中主要要项目如下:

  1. Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 1.2文档转换成Swagger 2.0文档等功能。

  2. Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF…)、Servlets和Play框架进行集成。

  3. Swagger-js: 用于JavaScript的Swagger实现。

  4. Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。

  5. Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。

  6. Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。

2:Maven

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.2.2</version>
</dependency>

<!-- 下面这个界面更好看,更好用-->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.5</version>
</dependency>

3:创建Swagger2配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
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 //swagger注解
public class SwaggerConfig {
    @Bean
    public Docket webApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                //指定扫描的包
                .select()
                //.paths(PathSelectors)  //路径过滤
                .build();
    }

    private ApiInfo webApiInfo(){
        return new ApiInfoBuilder()
                .title("网站-课程中心API文档")
                .description("本文档描述了课程中心微服务接口定义")
                .version("2.0")
                .contact(new Contact("lvguorui","111","111"))
                .build();
    }
}

4:添加文档内容

@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiProperty:用对象接收参数时,描述对象的一个字段
@ApiResponse:HTTP响应其中1个描述
@ApiResponses:HTTP响应整体描述
@ApiIgnore:使用该注解忽略这个API
@ApiError :发生错误返回的信息
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数

5:具体配置

5.1 注解

  • @Api()用于类;
      表示标识这个类是swagger的资源

  • @ApiOperation()用于方法;
      表示一个http请求的操作

  • @ApiParam()用于方法,参数,字段说明;
      表示对参数的添加元数据(说明或是否必填等)

  • @ApiModel()用于类;
      表示对类进行说明,用于参数用实体类接收

  • @ApiModelProperty()用于方法,字段;
      表示对model属性的说明或者数据操作更改

  • @ApiIgnore()用于类,方法,方法参数;
      表示这个方法或者类被忽略

  • @ApiImplicitParam() 用于方法;
      表示单独的请求参数

  • @ApiImplicitParams() 用于方法;
      包含多个 @ApiImplicitParam

5.2 实践

@Api() - 用于类;表示标识这个类是swagger的资源

  • tags–表示说明
  • value–也是说明,可以使用tags替代
  • 但是tags如果有多个值,会生成多个list
@Api(value="用户controller",tags={"用户操作接口"}) 
@RestController 
public class UserController { 
 
}
 

@ApiOperation() - 用于方法;表示一个http请求的操作

  • value用于方法描述
  • notes用于提示内容
  • tags可以重新分组(视情况而用)

@ApiParam() - 用于方法,参数,字段说明;表示对参数的添加元数据(说明或是否必填等)

  • name–参数名
  • value–参数说明
  • required–是否必填
@Api(value="UserController",tags={"用户接口"})
@RestController
public class UserController {
     @ApiOperation(value="获取用户信息",tags={"获取用户信息"},notes="注意")
     @GetMapping("/getUserInfo")
     public User getUserInfo(@ApiParam(name="id",value="用户id",required=true) Long id,@ApiParam(name="username",value="用户名") String username) { 
     User user = userService.getUserInfo();
 
     return user;
  }
}

@ApiModel() - 用于类 ;表示对类进行说明,用于参数用实体类接收

  • value–表示对象名
  • description–描述

@ApiModelProperty() - 用于方法,字段; 表示对model属性的说明或者数据操作更改

  • value–字段说明
  • name–重写属性名字
  • dataType–重写属性类型
  • required–是否必填
  • example–举例说明
  • hidden–隐藏
@ApiModel(value="user",description="用户对象")
@Data
public class User implements Serializable{
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value="用户名",name="username",example="xingguo")
    private String username;
    @ApiModelProperty(value="状态",name="state",required=true)
    private Integer state;
    private String password;
    private String nickName;
    private Integer isDeleted;


 
    @ApiModelProperty(value="ids",hidden=true)
    private String[] ids;
    private List<String> idList;
}
@ApiOperation("修改用户信息")
@PostMapping("/updateUserInfo")
public int updateUserInfo(@RequestBody @ApiParam(name="用户对象",value="json格式",required=true) User user){
    int num = userService.updateUserInfo(user);
    return num;
}
 

5.3 配置类

@ApiIgnore() - 用于类或者方法上,可以不被swagger显示在页面上。

@ApiImplicitParam() - 用于方法,表示单独的请求参数
@ApiImplicitParams() - 用于方法,包含多个 @ApiImplicitParam
  name–参数ming
  value–参数说明
  dataType–数据类型
  paramType–参数类型
  example–举例说明

@ApiOperation("查询测试")
@GetMapping("select")
//@ApiImplicitParam(name="name",value="用户名",dataType="String", paramType = "query")
@ApiImplicitParams({
@ApiImplicitParam(name="name",value="用户名",dataType="string", paramType = "query",example="xingguo"),
@ApiImplicitParam(name="id",value="用户id",dataType="long", paramType = "query")})
public void select(){

}
import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

/**
 * swagger-api 配置
 *
 * @author wzm
 * @version 1.0.0
 * @date 2019/6/15
 **/
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class Swagger2 {

    /**
     * http://localhost:8085/fabric-net/swagger-ui.html
     * http://localhost:8085/fabric-net/doc.html
     */

    private static final String SWAGGER_SCAN_BUSINESS_PACKAGE = "com.thyc.fabric.controller.business";
    private static final String BUSINESS_VERSION = "1.0.0";

    private static final String SWAGGER_SCAN_FABRIC_PACKAGE = "com.thyc.fabric.controller.fabric";
    private static final String FABRIC_VERSION = "1.0.0";

    @Bean
    public Docket createBusinessApi() {
        List<Parameter> pars = new ArrayList<>();
        ParameterBuilder ticketPar1 = new ParameterBuilder();
        ticketPar1.name("Authorization").description("登录令牌")
                .modelRef(new ModelRef("string")).parameterType("header")
                .required(false).build();
        pars.add(ticketPar1.build());
        return new Docket(DocumentationType.SWAGGER_2)
                .globalOperationParameters(pars)
                //分组名不支持中文
                .groupName("business")
                .apiInfo(apiBusinessInfo())
                .pathMapping("/")
                .select()
                // 对所有api进行监控
                .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BUSINESS_PACKAGE))
                // 错误路径不监控
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                // 对根下所有路径进行监控
                .paths(PathSelectors.regex("/.*"))
                .build();
    }

    private ApiInfo apiBusinessInfo() {
        Contact contact = new Contact("thyc","thyc.com","thyc@email");
        return new ApiInfoBuilder()
                //设置文档的标题
                .title("Business")
                //设置文档的描述->1.Overview
                .description("业务模块数据管理")
                //设置文档的版本信息-> 1.1 Version information
                .termsOfServiceUrl("http://localhost:8085/fabric-net")
                .contact(contact)
                .version(BUSINESS_VERSION)
                .build();
    }

    //------------------------------------------------------------------------------------------------------------------

    @Bean
    public Docket createFabricApi() {
        List<Parameter> pars = new ArrayList<Parameter>();
        ParameterBuilder ticketPar1 = new ParameterBuilder();
        ticketPar1.name("Authorization").description("登录令牌")
                .modelRef(new ModelRef("string")).parameterType("header")
                .required(false).build();
        pars.add(ticketPar1.build());
        return new Docket(DocumentationType.SWAGGER_2)
                .globalOperationParameters(pars)
                //分组名不支持中文
                .groupName("fabric")
                .apiInfo(apiFabricInfo())
                .pathMapping("/")
                .select()
                // 对所有api进行监控
                .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_FABRIC_PACKAGE))
                // 错误路径不监控
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                // 对根下所有路径进行监控
                .paths(PathSelectors.regex("/.*"))
                .build();
    }

    private ApiInfo apiFabricInfo() {
        Contact contact = new Contact("thyc","thyc.com","thyc@email");
        return new ApiInfoBuilder()
                //设置文档的标题
                .title("Fabric-Network")
                //设置文档的描述->1.Overview
                .description("超级账本网络信息管理")
                //设置文档的版本信息-> 1.1 Version information
                .termsOfServiceUrl("http://localhost:8085/fabric-net")
                .contact(contact)
                .version(FABRIC_VERSION)
                .build();
    }
    
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值