swagger2 统一默认Response Code

简介: swagger2 统一默认Response 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,方便前端联调。

相关文章
|
7月前
|
JSON 前端开发 Java
前端请求SpringBoot接口出现Required request body is missing
前端请求SpringBoot接口出现Required request body is missing
334 2
|
7月前
|
Java
【极问系列】springBoot集成elasticsearch出现Unable to parse response body for Response
【极问系列】springBoot集成elasticsearch出现Unable to parse response body for Response
932 2
|
XML JSON 前端开发
SpringMVC运行项目出现The request sent by the client was syntactically incorrect.问题解决思路?
使用SpringMVC报HTTP Status 400 - The request sent by the client was syntactically incorrect.的错误怎么解决,你不妨看一下我的这个解决思路,再决定,往往你最忽略的地方就是你最容易报错的地方,所以我建议你看一看我的这个思路是否与你的问题一样
|
3月前
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
649 0
|
6月前
|
Kubernetes 容器 Perl
k8s部署seata 报错 没有提供足够的身份验证信息 [ http-nio-7091-exec-2] [ty.JwtAuthenticationEntryPoint] [ commence] [] : Responding with unauthorized error. Message - Full authentication is required to access this resource
Kubernetes pod 在16:12时出现两次错误,错误信息显示需要完整认证才能访问资源。尽管有此错误,但页面可正常访问。附有yaml配置文件的图片。
477 2
|
7月前
|
Java
Request method ‘GET‘ not supported,不支持GET形式访问
Request method ‘GET‘ not supported,不支持GET形式访问
597 0
|
Web App开发 前端开发 JavaScript
DevTools 无法加载 SourceMap 错误:状态代码 404,net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools 无法加载 SourceMap 错误:状态代码 404,net::ERR_HTTP_RESPONSE_CODE_FAILURE
407 0
|
开发框架 前端开发 JavaScript
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
505 0
.NET Core Web API使用HttpClient提交文件的二进制流(multipart/form-data内容类型)
|
JSON 前端开发 Java
【Json与Ajax交互报错解决】No converter found for return value of type: class com.github.pagehelper.PageInfo
【Json与Ajax交互报错解决】No converter found for return value of type: class com.github.pagehelper.PageInfo
335 0
【Json与Ajax交互报错解决】No converter found for return value of type: class com.github.pagehelper.PageInfo
|
前端开发 Java Maven
SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势
虽然 http 的提供了一整套完整、定义明确的状态码,但实际的业务支持中,后端并不总会遵守这套规则,更多的是在返回结果中,加一个 code 字段来自定义业务状态,即便是后端 5xx 了,返回给前端的 http code 依然是 200 那么如果我想遵守 http 的规范,不同的 case 返回不同的 http code 在 Spring 中可以做呢?
1051 0
SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势