springboot+Swagger2构建API文档

Swagger2笔记

配置

很简单,如下所示:

1@Configuration 2@EnableSwagger2 3public class SwaggerConfig { 4 5 @Bean 6 public Docket createRestApi(){ 7 return new Docket(DocumentationType.SWAGGER_2) 8 .apiInfo(apiInfo()) 9 .select() 10 .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) 11 .paths(PathSelectors.any()) 12 .build(); 13 } 14 15 private ApiInfo apiInfo(){ 16 return new ApiInfoBuilder().title("doris-alarm-service") 17 .description("告警服务API") 18 .termsOfServiceUrl("http://192.168.7.56/") 19 .contact(new Contact("王用军","","wangyongjun@sunseaiot.com")) 20 .version("0.1") 21 .build(); 22 } 23 24} 25

使用

1@RestController 2@Api(tags = {"告警输入API"}) 3public class AlarmInputController { 4 5 @Autowired 6 private AlarmService alarmService; 7 8 @PostMapping(value = "/alarm") 9 @ApiOperation(value = "创建一个告警",notes = "向服务器发送一个告警") 10 @ApiImplicitParams(@ApiImplicitParam(name = "alarmCreate",value = "创建告警信息实体", required = true,dataType = "AlarmCreate",paramType = "body")) 11 public ResponseEntity<Alarm> createAlarm( 12 @RequestBody AlarmCreate alarmCreate 13 ){ 14 return new ResponseEntity<>(alarmService.createAlarm(alarmCreate), HttpStatus.CREATED); 15 } 16 17} 18 19/** 20 * 根据告警信息uuid获取告警信息 21 * @param uuid 22 * @return 23 */ 24@GetMapping(value = "/alarm/{uuid}") 25@ApiOperation(value = "根据uuid获取一条告警",notes = "通过uuid获取一条告警信息") 26@ApiImplicitParams(@ApiImplicitParam(name = "uuid",value = "告警信息编号",required = true,dataType = "Long",paramType = "path")) 27public ResponseEntity<Alarm> getByLevel(@PathVariable(value = "uuid") Long uuid){ 28 if(uuid == null){ 29 ResponseEntity.badRequest().body(Result.failure401().msg("参数uuid不能为null")); 30 } 31 return new ResponseEntity<>(alarmService.getAlarmByUuid(uuid), HttpStatus.OK); 32} 33 34/** 35 * 多条告警信息 36 */ 37@GetMapping(value = "/alarms") 38@ApiOperation(value = "根据条件获取多条告警",notes = "通过条件获取多条告警信息") 39@ApiImplicitParams({ 40 @ApiImplicitParam(name = "serialNum", value = "设备对告警信息的编号", required = false, dataType = "string",paramType = "query"), 41 @ApiImplicitParam(name = "name", value = "告警名称", required = false, dataType = "string",paramType = "query"), 42 @ApiImplicitParam(name = "value", value = "告警值", required = false, dataType = "string",paramType = "query"), 43 @ApiImplicitParam(name = "dsn", value = "告警设备DSN", required = false, dataType = "string",paramType = "query"), 44 @ApiImplicitParam(name = "level", value = "告警级别,WARN,SERIOUS,ERROR", required = false, dataType = "string",paramType = "query"), 45 @ApiImplicitParam(name = "alarmTimeStart", value = "设备告警时间范围开始", required = false,dataType = "long",paramType = "query"), 46 @ApiImplicitParam(name = "alarmTimeEnd", value = "设备告警时间范围结束", required = false, dataType = "long",paramType = "query"), 47}) 48public ResponseEntity<List<Alarm>> getAlarms(@ApiIgnore AlarmSearch alarmSearch){ 49 50 return new ResponseEntity<>(alarmService.getAlarms(alarmSearch),HttpStatus.OK); 51} 52 53@ApiModel 54public class AlarmCreate implements Serializable { 55 56 private String serialNum; //设备对告警信息的编号 57 @ApiModelProperty(value = "告警名称",dataType = "string",required = true) 58 private String name; //告警名称 59 @ApiModelProperty(value = "告警值",dataType = "string",required = true) 60 private String value; //告警值 61 @ApiModelProperty(value = "告警设备DSN",dataType = "string",required = true) 62 private String dsn; //告警设备DSN 63 @ApiModelProperty(value = "告警等级",dataType = "string",required = true) 64 private String level; //告警级别,WARN,SERIOUS,ERROR 65 @ApiModelProperty(value = "设备告警时间",dataType = "long",required = true) 66 private Long alarmTime; //设备告警时间 67 68 //... 69} 70

说明

  1. @Api(tags = "告警信息输出API")用在controller上,注解中还有produces、consumes、protocols、authorizations、hidden基本用不上,可按需使用。
  2. @ApiOperation,用在方法上,value-api名称,notes-api说明,其余属性一般都不用写。
  3. @ApiImplicitParams、@ApiImplicitParam配合用在方法上,用来说明请求参数。
  • 建议不要用使用@ApiParam,该注解功能与@ApiImplicitParam 相同,只是使用位置不同,@ApiImplicitParam写在方法上,@ApiParam加在参数上,后者会影响代码阅读,不如前者干净整洁。
  • @ApiImplicitParam必须用在@ApiImplicitParams里面,不然不起作用
  • @ApiImplicitParam属性:name-参数名,value-参数说明,required-是否必须,dataType数据类型(对象直接写类名)、paramType-参数类型(path-路径变量,query-问号拼接查询参数串,body-请求体,header-请求头,form-表单提交),这四个参数都不是必须的,有的能自动推断,有的有默认值,但是建议都写上,因为在某些场景下,自动推断会失效。
  1. @ApiIgnore,用在参数或者方法上,忽略该方法或者参数。此处有坑:如上示例所示,我是用一个对象接收参数,用@ApiImplicitParam依次描述各个参数,这时就必须使用@ApiIgnore忽略掉你的对象参数,不然swagger会将这个对象参数也推断为使用该api需要的参数。(当然你也可以不用对象接收参数,而是直接接收各个字段参数,这样swagger对参数的推断就与你使用@ApiImplicitParam声明的参数相符了)
  2. 当我们使用@RequestBody注解接收参数时,可以使用@ApiModel和@ApiModelProperty对该参数进行一些说明(不用也可以,swagger会自己推断一些信息。但是自动推断不能判断某个属性是不是必须的,这个必须你自己指定。另外,某些场景下自动推断会出错)
  3. @ApiResponses、@ApiResponse配合用在方法上或controller上。
  • 注意,这两个注解时用来说明可能出现的错误响应的,正确的响应在@ApiOperation中说明
  • @ApiResponse必须用在@ApiResponses中,不然无效
  • 用在方法优先级高于类上的
  • @ApiResponse属性:code-http响应码,message-消息,response-响应的数据类型
  • 一般不需要使用这两个注解,因为对API来说重要的是正确的响应是什么,错误的无需特别说明。
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )