定义通用返回包装类

定义通用返回包装类

包装返回正确的数据格式,返回类型示例

{"code":200,"message":"success","data":[]
}

通用包装类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @author zhangshao* @description 通用响应类*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class CommonResponse {/*** 状态码*/private int code;/*** 对应请求的返回处理结果, 如:成功、失败等*/private String message;private Object data;public static CommonResponse ok(){return CommonResponse.ok(null);}public static CommonResponse ok(Object result){return CommonResponse.ok("success",result);}public static CommonResponse ok(String status,Object result){CommonResponse response = new CommonResponse();response.setCode(200);response.setMessage(status);response.setData(result);return response;}public static CommonResponse error(String status){CommonResponse response = new CommonResponse();response.setCode(500);response.setMessage(status);return response;}public static CommonResponse error(CommonError commonError){CommonResponse response = new CommonResponse();response.setCode(commonError.getErrCode());response.setMessage(commonError.getErrMsg());return response;}public static CommonResponse error(int code,String status){CommonResponse response = new CommonResponse();response.setCode(code);response.setMessage(status);return response;}}

其中CommonError为抽象类

public interface CommonError {public int getErrCode();public String getErrMsg();public CommonError setErrMsg(String errMsg);}

image-20241231112627997

使用BusinessEnum实现该抽象类,使用BusinessErrorEnum定义业务异常

import lombok.AllArgsConstructor;@AllArgsConstructor
public enum BusinessErrorEnum implements CommonError{// 通用错误类型10001PARAMETER_VALIDATION_ERROR(10001,"参数校验错误"),UNKNOWN_ERROR(10002,"未知错误"),// 20000开头为用户信息相关错误定义USER_NOT_EXIST(20001,"用户不存在"),// 30001开头为svn相关错误定义ADD_SVN_REPO_ERROR(30001,"添加SVN仓库失败"),DEL_SVN_REPO_ERROR(30002,"删除SVN仓库失败"),BATCH_DEL_SVN_REPO_ERROR(30003,"批量删除SVN仓库失败"),EDIT_SVN_REPO_ERROR(30004,"编辑SVN仓库失败"),DUPLICATE_SVN_REPO_ERROR(30005,"重复添加SVN仓库"),;private int errCode;private String errMsg;@Overridepublic int getErrCode() {return this.errCode;}@Overridepublic String getErrMsg() {return this.errMsg;}@Overridepublic CommonError setErrMsg(String errMsg) {this.errMsg = errMsg ;return this;}
}

使用BusinessException自定义异常类。

import com.hbisdt.util.CommonError;/**** @author zhangshao* @date 2024/12/30 09:20* @description 包装器业务异常类实现*/public class BusinessException extends RuntimeException implements CommonError {private CommonError commonError;/*** 直接接收BusinessErrorEnum的传参用于构造业务异常* @param commonError*/public BusinessException(CommonError commonError) {super();this.commonError = commonError;}public BusinessException(CommonError commonError,String errMsg){super();this.commonError = commonError;this.commonError.setErrMsg(errMsg);}@Overridepublic int getErrCode() {return this.commonError.getErrCode();}@Overridepublic String getErrMsg() {return this.commonError.getErrMsg();}@Overridepublic CommonError setErrMsg(String errMsg) {this.commonError.setErrMsg(errMsg);return this;}
}

同时,为了使throw出去的业务异常能最终处理,定义全局异常处理类GlobalExceptionHandler

import com.hbisdt.util.BusinessErrorEnum;
import com.hbisdt.util.CommonResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;/*** 处理统一异常的handler*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {@ExceptionHandler(BusinessException.class)public Object handleBusinessException(BusinessException e) {log.error("BusinessException: ", e);return CommonResponse.error(e.getErrCode(),e.getErrMsg());}@ExceptionHandler(Exception.class)public Object handleException(Exception e) {log.error("Default Exception: ", e);return CommonResponse.error(BusinessErrorEnum.UNKNOWN_ERROR);}}

使用示例

 	@PostMapping("/svn/deleteRepo")public CommonResponse deleteRepo(@RequestBody SvnRepo svnRepo) throws BusinessException {log.info("删除SVN仓库,参数:{}", svnRepo.getId());boolean result = svnRepoService.deleteRepo(svnRepo.getId());log.info("删除结果:{}", result);if(!result){throw new BusinessException(BusinessErrorEnum.DEL_SVN_REPO_ERROR);}return CommonResponse.ok();}

业务正确,返回正确的包装类,业务抛出异常,返回错误信息和错误码。

{"code": 30005,"message": "重复添加SVN仓库","data": null
}

此外,类似于10001这种参数校验错误,只需要在补充具体的参数错误原因,而无需重复定义。抛出异常时,可采用如下示例方式给出具体原因。

throw new BusinessException(BusinessErrorEnum.PARAMETER_VALIDATION_ERROR,"邮箱不允许为空,请确认后提交");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/861914.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dolphinscheduler相关

任务状态和事件驱动时序图

蓝牙设备过多导致Win11出现不定时死机现象

10月份之后发现自己的ROG FLOW X16笔记本开始不定时死机了。具体表现是正常使用过程突然死机,各种地方点不动,不能注销,不能重启,不能关机,我的电脑打不开,任务管理器打开是一片空白。仅有一些窗口最大化和最小化之类的功能可以点击。并且没有任何表征,就是突然给你出现…

绝对不能错过的:Air201看门狗定时器!

看门狗技术(Watchdog Timer)是嵌入式系统中一种重要的稳定性增强技术,用于监测和恢复系统的正常运行状态。当系统因程序跑飞、死机或受到电磁干扰而无法正常工作时,看门狗能够及时检测并采取相应措施,从而避免系统长时间处于故障状态。 本文将带你了解看门狗的工作原理、应…

关于Chat2DB的吐槽

最近心血来潮准备支援原子一波、看着多出来一个选项联合会员chat2db、于是纳闷chat2db是个啥东西于是下载下来试用了一下,怎么说呢、不好评价 ​ SQL优化功能:一股浓浓的AI味,跟你直接问ChatGpt差不多。 ​ sql提示也没想象的好、自然语言转sql更是难用、不如直接自己写 ​ …

[转] 认知负荷才是关键

Title: cognitive-load/README.zh-cn.md at main zakirullin/cognitive-load URL Source: https://github.com/zakirullin/cognitive-load/blob/main/README.zh-cn.md简介(Introduction)这世上有如此多的“流行语”和“最佳实践”,但是让我们把注意力转向更基础的方面。即——…

7、RabbitMQ队列之远程调用(RPC)【RabbitMQ官方教程】

在第二个教程中,我们学习了如何使用工作队列在多个工作人员之间分配耗时的任务。 但是,如果我们需要在远程计算机上运行一个函数并等待结果呢?好吧,那是另一回事。这种模式通常被称为远程过程调用或RPC。 在本教程中,我们将使用RabbitMQ构建一个RPC系统:一个客户端和一个…

Dictionary 添加重复的键值对

Dictionary 添加重复的键值对| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission | | -------------| -------------| -------------| --------…

javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通

javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission | | -------------| -----…

ThreeJs-11精通着色器编程(重难点)

着色器语言编程比较重要,后面的几个章节都会围绕这个来做特效 一.初识着色器语言 首先什么叫做着色器,他是一种语言,首先需要设置为着色器材质,然后在材质里面书写一些语言,可以告诉他顶点,然后去自定义一些东西,比如我想要这一面为红色等等比如用一个基础材质做了一个平…

2024.12.30 由于不会制表痛失一份工作,学习excel制表

单元格格式可以用来切换其中内容的格式,小技巧,数值右对齐,文字左对齐 单元格内换行输出使用Alt + Enter 在>数据->分列中可以将某个单元格中的数据分成不同的列 1.随机函数 rand()返回一个0-1之间的数字,且图表每次更新都会进行随机 randbetween(low,high)返回一…

关于 IntelliJ IDEA 2024 安装激活使用教程以及常见问题(激活至2026,实际上永久,亲测!)

申明:本教程 IntelliJ IDEA补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 !卸载老版本 IDEA 首先,如果小伙伴的电脑上有安装老版本的 IDEA , 需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即…