暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringBoot2.x学习笔记——整合Swagger UI

CodeWu 2019-05-14
156


概述

  关于Open API

    Open API(开放API)是服务型网站常用的一种应用,网站的服务商将自己的网站服务封装成一系列API(应用编程接口)对外开放,供第三方开发者使用。

    Open API类型上分为标准REST和类REST(RPC形态)。

    REST类型具有如下优点:

  • 服务地址就是资源定位地址

  • 服务操作就是Http请求中的方法类型(GET、POST、DELETE、PUT)

  • 资源易于管理,系统扩展容易,权限控制部分依托于现有协议

    类REST类型具有如下优点:

  • 对原有改造较小

  • 易于对逻辑进行抽象

    Open API服务类型

  • 数据型

    将自身数据资源开放,让应用开发者根据已有数据资源进行二次开发。

  • 应用型

    与数据型应用紧密结合,数据输入可以是外部的数据资源,也可以是自身已有数据资源。

  • 服务型

    多用于云计算和资源存储

    Open API交互数据格式

    对于数据型和应用型服务来说,主要提供的数据响应格式为XML和JSON。

  关于 Swagger

    在前后端分离的开发模式下,为了减小接口定义沟通成本,需要使用Swagger。Swagger是一个规范和框架,用于生成、描述、调用和可视化RestFul风格的Web资源服务。

SwaggerUI使用详解

    Swagger常用注解

    

注解名称注解说明作用域
@Api用在控制器上,对控制器进行说明控制器
@ApiOperation用在控制器相关方法上,对请求方法、作用进行描述控制器方法
@ApiImplicitParams用在请求方法上,对一组请求参数进行说明,配合@ApiImplicitParam使用控制器方法
@ApiImplicitParam用在@ApiImplicitParams注解中,对请求参数进行说明@ApiImplicitParams中表示一组参数,单独使用表示一个参数
@ApiResponses
用在控制器方法上,表示一组请求响应,配合@ApiResponse使用控制器方法
@ApiResponse
用在@ApiResponses中,表示请求相应信息@ApiResponses中
@ApiModel
用在数据载体上,描述响应数据信息实体类
@ApiModelProperty
用在数据载体的属性字段上,描述响应数据属性信息实体类属性字段

    

package com.springboot.demo.swagger2.controller;
@Api(tags = "员工信息操作")
@Controller
@RequestMapping("/employee")
public class EmployeeController {
@ApiOperation(value = "查询所有员工集合信息",notes = "查询所有员工列表")
@RequestMapping(value = "/findAll",method = RequestMethod.GET)
@ResponseBody
public String findAllEmployee()
{

}
@ApiOperation(value = "根据员工标识获取员工详情信息",notes = "获取员工详情")
@ApiImplicitParam(name = "employeeId",value = "员工标识",required = true,paramType ="path")
@RequestMapping(value = "/getEmployee/{employeeId}",method = RequestMethod.GET)
public String getEmployeeByEmployeeId(@PathVariable String employeeId)
{

}
@ApiOperation(value = "员工登录信息校验",notes = "员工登录校验")
@ApiImplicitParams({
@ApiImplicitParam(name = "userName", value = "用户名", required = true, paramType = "query"),
@ApiImplicitParam(name = "userPwd", value = "登录密码", required = true, paramType = "query")
})
@RequestMapping(value = "/checklogin",method = RequestMethod.GET)
public String checkLogin(@RequestParam String userName,@RequestParam String userPwd)
{

}
@ApiOperation(value = "保存员工信息",notes = "保存员工信息")
@ApiImplicitParam(name = "employee",value = "被保存员工信息",required = true,paramType = "query")
@ApiResponses({
@ApiResponse(code = 200, message = "员工保存成功"),
@ApiResponse(code = 500, message = "服务器错误"),
@ApiResponse(code = 404, message = "请求路径错误")
})
@RequestMapping(value = "/saveEmployee",method = RequestMethod.POST)
public String saveEmployee(@RequestParam Employee employee)
{

}
@ApiOperation(value="删除员工信息",notes = "删除员工信息")
@ApiImplicitParam(value = "员工标识",name = "employeeId",required = true,paramType = "query")
@ApiResponses({
@ApiResponse(code = 200, message = "员工删除成功"),
@ApiResponse(code = 500, message = "服务器错误"),
@ApiResponse(code = 404, message = "请求路径错误")
})
@RequestMapping(value = "/removeEmployee",method = RequestMethod.DELETE)
public String deleteEmployee(@RequestParam String employeeId)
{

}
}


复制

    @Api

    用在控制器上,对控制器进行说明。tags用于描述控制器信息。

    @ApiOperation

    用在请求方法上,对方法的作用、用途信息进行说明。value:用于描述方法作用、用途;notes:方法备注说明

   @ApiImplicitParam

    用在请求方法上,对请求参数进行说明。name:参数名称;value:参数描述信息;required:是否必填;paramType:参数获取方式(header:@RequestHeader;query:@RequestParam;path:@PathVariable)。可以单独使用,也可以和 @ApiImplicitParams注解结合使用。

   @ApiImplicitParams

    用在请求方法上,对一组请求参数进行说明。

    @ApiResponses

    用在请求方法上,对一组请求响应信息进行说明。

    @ApiResponse

    用在@ApiResponses注解中,对状态码对应响应信息进行描述。code:响应码信息(与http响应码一致),message:响应码对应描述。

@ApiModel(value = "员工信息",description = "员工信息")
public class Employee implements Serializable{
@ApiModelProperty(value = "员工标识",hidden = true,example = "xxxxxx")
private String employeeId;
@ApiModelProperty(value="登录用户名",required = true,dataType = "String")
private String loginName;
@ApiModelProperty(value="登录密码",required = true,dataType = "String")
    private String loginPwd;  
}
复制


    @ApiModel

    该注解通常标注在数据载体上,表示响应数据载体相关信息。value:数据载体说明信息;description:数据载体描述信息。

    @ApiModelProperty

    该注解通常标注在数据载体属性字段上,表示响应数据载体属性字段相关信息。value:字段说明信息;required:是否必填;dataType:字段数据类型。

使用Swagger-Bootstrap-ui

    引入依赖

<!--引入Swagger2依赖-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!--引入swagger-bootstrap-ui依赖-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.0</version>
</dependency>
复制

    创建Swagger配置类

@Configuration
@EnableSwagger2
@ComponentScan("com.springboot.demo.swagger2.controller")
@EnableSwaggerBootstrapUI
public class Swagger2Config {
@Bean
public Docket createRestApi()
{
return new Docket(DocumentationType.SWAGGER_2).apiInfo(createApiInfo()).select()
                .apis(RequestHandlerSelectors.basePackage(""))
.paths(PathSelectors.any()).build();
}
private ApiInfo createApiInfo()
{
return new ApiInfoBuilder().title("")//标题
.description("")//描述
.termsOfServiceUrl("")//服务网站
                .contact(new Contact("","",""))//三个参数依次是名称、网站地址、邮箱
.version("1.0")
.build();
}
}


复制

访问http://{host}:{port}/doc.html


文章转载自CodeWu,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论