ITPub博客

首页 > 架构设计 > 软件结构 > 备忘录六:Spring Boot + Swagger_UI

备忘录六:Spring Boot + Swagger_UI

原创 软件结构 作者:百联达 时间:2019-08-20 16:34:26 0 删除 编辑

一:pom.xml 依赖

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

二:application.yaml 开关配置

# swagger
swagger: 
  switch: true

三:SwaggerConfig.java 配置

@Configuration
@EnableSwagger2
public class SwaggerConfig {
	@Value("${swagger.switch}")
	private boolean swaggerSwitch;
	@Bean
	public Docket createRestApi() {
		Docket docket = new Docket(DocumentationType.SWAGGER_2);
		if (swaggerSwitch) {
			docket.enable(true);
		} else {
			docket.enable(false);
		}
		docket.apiInfo(apiInfo()).select()
				// 加了ApiOperation注解的类,才生成接口文档
				.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
				// 包下的类,才生成接口文档
				.paths(PathSelectors.any()).build().securitySchemes(security());
		return docket;
	}
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder().title("Demo").description("接口文档").termsOfServiceUrl("").version("0.1").build();
	}
	private List<ApiKey> security() {
		return newArrayList(new ApiKey("token", "token", "header"));
	}
}

四: 接口配置代码示例

/**
	  * @Title: list
	  * @Description: 测试
	  * @return void    返回类型
	  * @throws
	  */
	@ApiOperation(value="消息列表查询",notes="消息列表查询")
	@ApiImplicitParams({@ApiImplicitParam(name="userId",value="用户ID",required=true,dataType="int")})
	@ApiResponses(value= {@ApiResponse(code = 200,message="Sucess",response=MsgPushInfoEntity.class,responseContainer="List")})
	@RequestMapping(value="/list",method=RequestMethod.POST)
	public List<MsgPushInfoEntity> list(@RequestBody MsgPushInfoEntity msg) {
		logger.info("===========" + msgPushInfoService.list().size() + "===========");
		logger.error("===========" + msgPushInfoService.list().size() + "===========");
		return  new ArrayList<MsgPushInfoEntity>();
	}

五:swagger-ui展示

六:Swagger注解说明

1.@Api

该注解将一个Controller(Class)标注为一个swagger资源(API)。在默认情况下,Swagger-Core只会扫描解析具有

@Api注解的类, 而会自动忽略其他类别资源(JAX-RS endpoints,Servlets等等)的注解。该注解包含以下几个重要属性:

  tags

  API分组标签。具有相同标签的API将会被归并在一组内展示。

  value

  如果tags没有定义,value将作为Api的tags使用

  description

  API的详细描述,在1.5.X版本之后不再使用,但实际发现在2.0.0版本中仍然可以使用

2.@ApiOperation

在指定的(路由)路径上,对一个操作或HTTP方法进行描述。具有相同路径的不同操作会被归组为同一个操作对象。

不同的HTTP请求方法及路径组合构成一个唯一操作。此注解的属性有:

  value

  对操作的简单说明,长度为120个字母,60个汉字。

  notes

  对操作的详细说明。

  httpMethod

  HTTP请求的动作名,可选值有:"GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS" and "PATCH"。

  code

  默认为200,有效值必须符合标准的HTTP Status Code Definitions。

3.@ApiImplicitParams

  注解ApiImplicitParam的容器类,以数组方式存储。

@ApiImplicitParam

对API的单一参数进行注解。虽然注解@ApiParam同JAX-RS参数相绑定,但这个@ApiImplicitParam注解可以以统一的方式

定义参数列表,也是在Servelet及非JAX-RS环境下,唯一的方式参数定义方式。注意这个注解@ApiImplicitParam必须被

包含在注解@ApiImplicitParams之内。可以设置以下重要参数属性:

  name

  参数名称

  value

  参数的简短描述

  required

  是否为必传参数

  dataType

  参数类型,可以为类名,也可以为基本类型(String,int、boolean等)

  paramType

  参数的传入(请求)类型,可选的值有path, query, body, header or form。

3.@ApiParam

  增加对参数的元信息说明。这个注解只能被使用在JAX-RS 1.x/2.x的综合环境下。其主要的属性有:

  required

  是否为必传参数

  value

  参数简短说明

4.@ApiResponses

注解@ApiResponse的包装类,数组结构。即使需要使用一个@ApiResponse注解,也需要将@ApiResponse注解包含在

注解@ApiResponses内。

5.@ApiResponse

描述一个操作可能的返回结果。当REST API请求发生时,这个注解可用于描述所有可能的成功与错误码。可以用,也可以不

用这个注解去描述操作的返回类型,但成功操作的返回类型必须在@ApiOperation中定义。如果API具有不同的返回类型,那么需要分别定义返回值,并将返回类型进行关联。但Swagger不支持同一返回码,多种返回类型的注解。注意:这个注解必须被包含在@ApiResponses注解中。

  code

  HTTP请求返回码。有效值必须符合标准的HTTP Status Code Definitions。

  message

  更加易于理解的文本消息

  response

  返回类型信息,必须使用完全限定类名,比如“com.xyz.cc.Person.class”。

  responseContainer

  如果返回类型为容器类型,可以设置相应的值。有效值为 "List", "Set" or "Map",其他任何无效的值都会被忽略。

  Model的注解

  对于Model的注解,Swagger提供了两个:@ApiModel及@ApiModelProperty,分别用以描述Model及Model内的属性。

6.@ApiModel

提供对Swagger model额外信息的描述。在标注@ApiOperation注解的操作内,所有的类将自动被内省(introspected),

但利用这个注解可以做一些更加详细的model结构说明。主要属性有:

  value

  model的别名,默认为类名

  description

  model的详细描述

7.@ApiModelProperty

  对model属性的注解,主要的属性值有:

  value

  属性简短描述

  example

  属性的示例值

  required

  是否为必须值


七:关于TOKER问题

考虑到安全的问题,每次请求API需要对用户进行验证与授权。目前主流的验证方式采用请求头部(request header)传递token,即用户登录之后获取一个token,然后每次都使用这个token去请求API。如果想利用swagger-UI进行API测试,必须显式为每个需要验证的API指定token参数。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-2654314/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年以上互联网经验,先后从事过制造业,证券业,物业行业和物流行业信息系统和互联网产品的研发,6年系统架构经验。最近关注Kubernetes微服务架构和Istio微服务治理框架。

注册时间:2013-02-05

  • 博文量
    319
  • 访问量
    1023666