swagger2 统一默认Response Code

举报
琴岛蛏子 发表于 2022/03/20 23:57:55 2022/03/20
【摘要】 swagger2 统一默认Response Code项目中通常定义一个返回对象Result,对返回对象的说明可以通过@ApiResponse进行说明如下,为每个类都指定精准但比较麻烦,可以通过统一配置的方式为每个请求附带默认的返回值说明。@ApiResponses({ @ApiResponse(code = 200, message = "code字段值,描述:成功"), })...

swagger2 统一默认Response Code

项目中通常定义一个返回对象Result,对返回对象的说明可以通过@ApiResponse进行说明如下,为每个类都指定精准但比较麻烦,可以通过统一配置的方式为每个请求附带默认的返回值说明。

@ApiResponses({
      @ApiResponse(code = 200, message = "code字段值,描述:成功"),
  })
@Data
public Result<T>{
    Integer code;
    String desc;
    T content;
}

API文档SpringBoot集成knif4j UI框架
knife4j 文档

pom依赖

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <!--在引用时请在maven中央仓库搜索3.X最新版本号-->
    <version>3.0.2</version>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>xxx</version>
</dependency>

通过globalResponses来设置统一的Response返回业务编码

swagger配置文件
RequestHandlerSelectors.basePackage扫描路径
RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class) 方法上有ApiOperation的注解

package com.dogs.doc.config;

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

import com.dogs.doc.enums.ResponseCodeEnums;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Response;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
public class Swagger2Config {

  @Bean
  public Docket createRestApi() {

    List<Response> globalResponses = new ArrayList<>();
    for (ResponseCodeEnums item : ResponseCodeEnums.values()) {
      globalResponses.add(new ResponseBuilder()
        .code(String.valueOf(item.getCode()))
        .description(item.getDesc())
        .build());
    }

    return  new Docket(DocumentationType.OAS_30)
        .useDefaultResponseMessages(true)
        .globalResponses(HttpMethod.GET, globalResponses)
        .globalResponses(HttpMethod.POST, globalResponses)
        .apiInfo(apiInfo())
        .select()
        .apis(RequestHandlerSelectors.basePackage("com.dogs.doc.controller"))
        .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
        .paths(PathSelectors.any())
        .build();

  }

  private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
        .title("Dogs APIs")
        .description("knife4j")
        .termsOfServiceUrl("http://www.baidu.com")
        .version("3.0")
        .build();
  }

}

统一返回值枚举

ResponseCodeEnums.java

package com.dogs.doc.enums;

import lombok.Getter;

@Getter
public enum ResponseCodeEnums {

  /**
   * ResponseCodeEnums 返回业务编码
   */
  CODE_500(500,"你是否还会在灯火下守候……"),
  CODE_800001(800001,"测试业务编码800001"),
  CODE_800002(800002,"测试业务编码800002"),
  ;

  int code;
  String desc;

  ResponseCodeEnums (int code, String desc) {
    this.code = code;
    this.desc = desc;
  }
}

@ApiResponse 可以为每个接口指定特别的返回值,一般都放到Enum@RestController
public class DocController {


  @ApiOperation("Response测试返回信息")
  @ApiResponses({
      @ApiResponse(code = 600100,message = "那个特别的你")
  })
  @GetMapping("/rep")
  public Object apiResponse(){

    return "rep";
  }
}

运行项目 访问localhost:8080/doc.html 查看文档

image.png

doc文档每个请求都会带有默认的code、desc,方便前端联调。

喜欢就点个赞鼓励下吧

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。