您现在的位置是:亿华云 > 应用开发
如何优雅的处理异常?SpringBoot全局异常与数据校验
亿华云2025-10-09 13:40:22【应用开发】1人已围观
简介要思考的问题在现在的前后端交互中,通常都规范了接口返回方式,如返回的接口状态成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,因此,如果想做全局异常,并且异常发生后能准
要思考的何优问题
在现在的前后端交互中,通常都规范了接口返回方式,雅的异常异常如返回的处理接口状态(成功|失败)以及要返回的数据在那个字段取,或者说失败了以后提示信息从接口哪里返回,全局因此,数据如果想做全局异常,校验并且异常发生后能准确的何优返回给前端解析,那么需要异常发生时返回给前端的雅的异常异常格式与正常失败场景的亿华云格式一致。
项目建立
利用idea 工具,处理很容易的全局搭建一个SpringBoot项目,要引入的数据maven依赖如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>很简单,除了加入web功能还加入了我们需要用到的校验JSR-303校验框架。
定义成功失败 返回码
public class Code { /** * 成功 */ public static int SUCCESSED = 1; /** * 失败 */ public static int FAILED = -1; }定义接口返回响应实体
public class Response<T> implements Serializable{ /** * */ private static final long serialVersionUID = 4250719891313555820L; /** * 返回结果集 */ private T result; /** * 返回消息 */ private String msg; /** * 响应码 */ private Integer code; //set get 略 }全局异常拦截和验证
定义自定义业务异常
public class MyException extends RuntimeException { private static final long serialVersionUID = -5875371379845226068L; public MyException(){ } public MyException(String msg){ this.msg = msg ; } /** * 异常信息 */ private String msg ; /** * 具体异常码 */ private int code = Code.FAILED; get set 略编写全局异常控制器并对自定义异常做处理
@ControllerAdvice public class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(value = MyException.class) @ResponseBody public Response<String> myExceptionErrorHandler(MyException ex) throws Exception { logger.error("myExceptionErrorHandler info:{ }",何优ex.getMessage()); Response<String> r = new Response<>(); r.setMsg(ex.getMsg()); r.setCode(ex.getCode()); return r; }编写controller模拟抛出业务异常
@RestController @RequestMapping("/user") public class UserController { @PostMapping(value = "/update") Response<Boolean> update(User user){ //todo 此处为模拟异常抛出 if(true){ throw new MyException("更新失败"); } //todo 此处为模拟返回 Response<Boolean> response = new Response<>(); response.setCode(Code.SUCCESSED); response.setResult(true); return response; } }postMan模拟请求接口,进行验证
数据绑定异常处理
通常我们操作数据的雅的异常异常时候,不仅前端需要进行数据校验,处理后端也应当进行拦截和进行相应的错误提示,高防服务器JSR-303校验框架也是我们的一种选择。
编写实体`User`,并对属性进行注解控制
public class User { @NotNull(message = "用户名不能为空") private String userName; private int age; //...全局异常控制类加入拦截
@ControllerAdvice public class GlobalExceptionHandler { private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(value = BindException.class) @ResponseBody public Response<String> bindExceptionErrorHandler(BindException ex) throws Exception { logger.error("bindExceptionErrorHandler info:{ }",ex.getMessage()); Response<String> r = new Response<>(); StringBuilder sb = new StringBuilder(); FieldError fieldError = ex.getFieldError(); sb.append(fieldError.getDefaultMessage()); r.setMsg(sb.toString()); r.setCode(Code.FAILED); return r; } //...编写控制器
@RestController @RequestMapping("/user") public class UserController { @PostMapping(value = "/add") Response<User> add(@Validated User user){ //todo 此处为模拟返回 Response<User> response = new Response<>(); response.setCode(Code.SUCCESSED); response.setResult(new User()); return response; } //...postMan模拟请求
不填写任何属性,模拟添加操作,准确进行拦截和报错
项目结构预览:
结尾
适合的才是***的,每个团队都应摸索出自己的一套异常解决方案,本文所提仅针对业务异常,希望大家也能有所收获
很赞哦!(95333)
相关文章
- 前面这两个步骤都是在本机完成的。到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。
- CNAME:对应解析的记录值为域名地址
- 因为域名解析需要同步到DNS根服务器,而DNS根服务器会不定时刷,只有DNS根服务器刷新后域名才能正常访问,新增解析一般会在10分钟左右生效,最长不会超过24小时,修改解析时间会稍微延长。
- 2016年1月1日:注册价格将降至每年7欧元。
- 公司在注册域名时还需要确保邮箱的安全性。如果邮箱不安全,它只会受到攻击。攻击者可以直接在邮箱中重置密码并攻击用户。因此,有必要注意邮箱的安全性。
- a、变更前的公司证件扫描件(代码证或者营业执照)及联系人身份证复印件、变更后的公司证件扫描件(代码证或者营业执照)及新的联系人身份证复印件;身份证复印件需本人签名,公司证件复印件需加盖公章。
- 4、club娱乐
- 要如何了解反向解析和域名解析?新手该怎么去操作?
- 5、企业注册国内域名需要证件,其它情况一律不需要证件。
- 记住那句话,域名向来不属于任何人,谁先买就归谁,购买期过后,域名又不再属于任何人。
热门文章
- 3、商标域名一经注册,就可以作为域名裁决过程中的主要信息之一。这可以大大增加公司被抢注的相关域名胜诉的机会。
- .net 适用于从事Internet相关的网络服务的机构或公司
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 6、提示添加成功,点击确认进行最后的确定操作。一般10分钟就解析生效,可以用域名进行访问了。
站长推荐
3、查看排名
4.选择顶级的域名注册服务商
只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。
互联网其实拼的也是人脉,域名投资也是一个时效性很强的东西,一个不起眼的消息就会引起整个域名投资市场的动荡,因此拓宽自己的人脉圈,完善自己的信息获取渠道,让自己能够掌握更为多样化的信息,这样才更有助于自己的域名投资。
4、club娱乐
众所周知,com域名拥有最大的流通市场和流通历史。最好选择com域名,特别是在购买域名时处理域名。其次可以是cn域名、net域名、org域名等主流域名,现在比较流行的王域名和顶级域名,都是值得注册和投资的。
在众多公司中,如果我们必须选择一家可信的公司,那当然是信得过的。