如果没有看前面几篇文章请先看前面几篇

SpringBoot定义优雅全局统一Restful API 响应框架

SpringBoot定义优雅全局统一Restful API 响应框架二

SpringBoot定义优雅全局统一Restful API 响应框架三

目前我们好像似乎解决所有问题,达到了我们理想的效果如下

但是在业务错误返回时候不太理想如下

没有必要返回 reuqest和errorMsg

还有如果业务非常复杂的时候,会不会出现错误码分配使用混乱和重复问题这个问题应该如何避免和解决呢?

这个时候我想到 使用业务错误常量来代替错误码,这样更加见字识意, 进一步抽象错误常量公共接口模块

package cn.soboys.springbootrestfulapi.common.error;

import java.util.List;

/**
* @author 公众号 程序员三时
* @version 1.0
* @date 2023/5/9 20:14
* @webSite https://github.com/coder-amiao
* 定义错误常量 代替错误码,避免业务复杂错误码分配重复等问题
*/
public interface CommonErrorConstant {
/**
* 公共错误码定义
*/
public static final String InvalidRequest = "InvalidRequest";
public static final String InvalidArgument = "InvalidArgument";
public static final String NotFound = "NotFound";
public static final String UnknownError = "UnknownError";
public static final String OK = "OK";
public static final String FAIL = "FAIL"; /**
* 其他自定义业务错误码
*/ }

通用错误码

package cn.soboys.springbootrestfulapi.common.error;

import cn.soboys.springbootrestfulapi.common.resp.ResultCode;

/**
* @author 公众号 程序员三时
* @version 1.0
* @date 2023/5/2 21:36
* @webSite https://github.com/coder-amiao
*/
public enum CommonErrorCode implements ResultCode { /**
* 错误请求
*/
INVALID_REQUEST(false, CommonErrorConstant.InvalidRequest, "Invalid request, for reason: "),
/**
* 参数验证错误
*/
INVALID_ARGUMENT(false, CommonErrorConstant.InvalidArgument, "Validation failed for argument "),
/**
* 未找到资源
*/
NOT_FOUND(false, CommonErrorConstant.NotFound, "Resource not found."),
/**
* 未知错误
*/
UNKNOWN_ERROR(false, CommonErrorConstant.UnknownError, "Unknown server internal error."); CommonErrorCode(Boolean success, String code, String message) {
this.success = success;
this.code = code;
this.message = message; } /**
* 响应是否成功
*/
private Boolean success;
/**
* 响应状态码
*/
private String code;
/**
* 响应信息
*/
private String message; @Override
public String getCode() {
return code;
} @Override
public String getMessage() {
return message;
} @Override
public boolean getSuccess() {
return success;
} }

正常请求

错误请求

  1. 调整后的业务异常

  2. 调整未知错误异常

对应代码已经上传更新github

在留一下一个思考问题,如果接口错误需要国际化应该如何实现?

如果你觉得对您有帮助关注公众号,程序员三时 我会给大家不定期分享热门技术,做开源项目,技术交流,面试,学习,分享自己入行多年一些感受和经验

SpringBoot定义优雅全局统一Restful API 响应框架四的更多相关文章

  1. Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!

    前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...

  2. Java Fluent Restful API自动化测试框架

    这是一个Restful API自动化测试框架,这是一个能让你写出高可读性测试代码的测试框架! 项目目标 话说目前行业内,Restful API自动化测试框架已经不是稀罕物了,各个语言都有自己的实现机制 ...

  3. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  4. 只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

    ## 统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生. 比较通用的返回值格式如下: ```jav ...

  5. Slim - 超轻量级PHP Restful API构建框架

    下载源码包: http://www.slimframework.com/ 基于Slim的Restful API Sample: <?php require '/darjuan/Slim/Slim ...

  6. springboot集成swagger2构建RESTful API文档

    在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...

  7. 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】03、创建RESTful API,并统一处理返回值

    本节应用Spring对RESTful的支持,使用了如@RestController等注解实现RESTful控制器. 如果对Spring中的RESTful不太明白,请查看相关书籍 1.创建一个数据对象, ...

  8. Node.js实现RESTful api,express or koa?

    文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...

  9. restful api 错误

    简介 随着移动开发和前端开发的崛起,越来越多的 Web 后端应用都倾向于实现 Restful API.Restful API 是一个简单易用的前后端分离方案,它只需要对客户端请求进行处理,然后返回结果 ...

  10. Restful API 中的错误处理

    简介 随着移动开发和前端开发的崛起,越来越多的 Web 后端应用都倾向于实现 Restful API. Restful API 是一个简单易用的前后端分离方案,它只需要对客户端请求进行处理,然后返回结 ...

随机推荐

  1. 配置git到码云

    一.安装完git之后,对项目文件点击右键选择Git Base Here #Git 全局设置用户名与邮箱 git config --global user.name "" git c ...

  2. MQ(基本概念)

    MQ的基本概念 队列管理器:是MQ中最上层的一个概念,由它为我们提供消息队列服务. 消息:即应用程序发送给MQ托管的数据.其有两部分组成:消息描述符和消息体. 消息分为两种类型:永久型和非永久型. 永 ...

  3. python+appium拉起APP

      1.首先需要完成环境配置: JDK:https://www.cnblogs.com/wenlongma/p/17103062.html: SDK:https://www.cnblogs.com/w ...

  4. Oracle coalesce函数 用于选取不为空的字段值

    coalesce(A,B)  若A为空则值为B 主流数据库系统都支持COALESCE()函数,这个函数主要用来进行空值处理,其参数格式如下: COALESCE ( expression,value1, ...

  5. 【转载】JMeter如何确定ramp-up时间

    转载自:https://blog.csdn.net/wangyanhong123456/article/details/123046451 线程组:用于模拟. 线程属性包含了:线程数.Ramp-Up时 ...

  6. DVWA-XSS (Reflected) 反射性 XSS

    反射性XSS,是非持久性,也是最常见的XSS,通过解析传入前段页面,常见为交互式输入框 LOW 审计源码 <?php // 发送请求头 header ("X-XSS-Protectio ...

  7. 【问题解决】Nacos服务端NVDB-CNVDB-2023674205漏洞

    缘起 最近(2023.03.13)客户现场要求自检有无使用Nacos,原因是Nacos存在认证绕过高危漏洞,其漏洞代码NVDB-CNVDB-2023674205,本文就简单说一下这个事儿,以及如何解决 ...

  8. Hello, YOU -- 通过简单的 hello_test.go 程序理解并学会编写测试

    Hello, YOU 书接上文上篇文章中,我们尝试编写了hello word 函数以及第一个测试 hello_test package main import "fmt" func ...

  9. ThreadLocal部分源码分析和应用场景

    结构演进 早起JDK版本中,ThreadLocal内部结构是一个Map,线程为key,线程在"线程本地变量"中绑定的值为Value.每一个ThreadLocal实例拥有一个Map实 ...

  10. JetBrains 2022全家桶-激活

    ## JetBrains 全家桶 激活教程 https://tech.souyunku.com/?page_id=50199