后端开发——统一处理异常Spring MVC机制

一、Spring MVC的统一处理异常机制

在Spring MVC中,存在统一处理异常的机制,
具体表现为:无论是哪个处理请求的过程中出现异常,每种类型的异常只需要编写一段处理异常的代码即可!

统一处理异常的核心是定义处理异常的方法:

  • 返回值类型:可参考处理请求的方法
  • 方法名称:自定义
  • 参数列表:至少包含被处理的异常对象,另外,可按需添加存在多个参数时,各参数不区分先后顺序。
  • 注解:必须添加@ExceptionHandler注解,表示此方法是处理异常的方法

在项目的根包下创建ex.handler.GlobalExceptionHandler类,作为当前项目的“全局异常处理器”类。

在类上添加@RestControllerAdvice注解,此类中特定的方法,将可以作用于整个项目中任何处理请求的过程中!
将统一处理异常的代码编写在此类中(各控制器类中不再需要重复的处理异常的方法):
例如:

package com.luoyang.small.ex.handler;import com.luoyang.small.ex.CustomServiceException;
import com.luoyang.small.web.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;/*** 统一处理异常** @author luoyang* @date 2023/12/17*/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandlerpublic JsonResult handleServiceException(CustomServiceException e) {log.warn("统一处理CustomServiceException,异常信息:{}", e.getMessage());return JsonResult.fail(e);}
}

二、辅助代码示例

其中对应的CustomServiceException.java

public class CustomServiceException extends RuntimeException {private ServiceCode serviceCode;public CustomServiceException(ServiceCode serviceCode, String message) {super(message);this.serviceCode = serviceCode;}public ServiceCode getServiceCode() {return serviceCode;}
}

其中对应的ServiceCode.java

public enum ServiceCode {OK(200),ERR_NOT_FOUND(404),ERR_CONFLICT(409),ERR_CUSTOM(1000);// 以下属性,表示每个枚举类型的对象都有一个Integer value属性,此属性的值将通过构造方法传入private Integer value;ServiceCode(Integer value) {this.value = value;}// 用于通过枚举对象获取Integer value属性的值public Integer getValue() {return value;}
}

其中对应的JsonResult.java

@Data
@Slf4j
@NoArgsConstructor
@AllArgsConstructor
//@JsonInclude(JsonInclude.Include.NON_NULL) //配置在类上,所以属性为空是都不展示该属性
public class JsonResult implements Serializable {private Integer code;private String message;public static JsonResult ok() {JsonResult jsonResult = new JsonResult();jsonResult.setCode(ServiceCode.OK.getValue());return jsonResult;}public static JsonResult fail(ServiceCode serviceCode, String message) {JsonResult jsonResult = new JsonResult();jsonResult.setCode(serviceCode.getValue());jsonResult.setMessage(message);log.error("JsonResult fail  serviceCode {}, message{}", serviceCode, message);return jsonResult;}public static JsonResult fail(CustomServiceException e) {return fail(e.getServiceCode(), e.getMessage());}
}

三、异常各处抛出,一个类统一处理

CustomServiceException异常各处抛出,如下:GlobalExceptionHandler.handleServiceException统一处理 ,在这里插入图片描述
当客户端向服务器端提交请求,例如“添加相册”,如果服务器端的控制器中处理请求的方法中调用Service方法时出现异常,但是,处理请求的方法不必对此异常进行处理,例如:在这里插入图片描述

当处理请求的方法不使用try..catch...捕获异常,如果出现异常,相当于此处理请求的方法会抛出异常!
在这里插入图片描述

在这里插入图片描述

注意:重点就是在自定义全局类(如:GlobalExceptionHandler)上添加@RestControllerAdvice注解,此类中特定的方法(例如handleServiceException(CustomServiceException e) 统一处理异常的方法)将可以作用于整个项目中任何处理请求的过程中!

创造价值,乐哉分享!
一起入门后端 204146007

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

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

相关文章

【计算机组成原理】存储系统基本概念与基本组成

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

机器视觉技术与应用实战(Chapter Two-03)

2.5 图像滤波和增强 滤波的作用是:图像中包含需要的信息,也包含我们不感兴趣或需要屏蔽的干扰,去掉这些干扰需要使用滤波。 增强的作用是:通过突出或者抑制图像中某些细节,减少图像的噪声,增强图像的视觉效…

人工智能在金融与商业领域的智能化变革

导言 随着人工智能技术的不断发展,金融和商业领域正迎来一场智能化的变革。随着人工智能的不断发展,其在金融和商业领域的应用正成为业界瞩目的焦点。本文将深入探讨人工智能在金融和商业应用中的关键技术、应用场景以及对未来的影响。 1. 关键技术与算…

【TB作品】51单片机,具有报时报温功能的电子钟

2.具有报时报温功能的电子钟 一、功能要求: 1.显示室温。 2.具有实时时间显示。 3.具有实时年月日显示和校对功能。 4.具有整点语音播报时间和温度功能。 5.定闹功能,闹钟音乐可选。 6.操作简单、界面友好。 二、设计建议: 1.单片机自选(C51、STM32或其他单片机)。 2.时钟日历芯…

[密码学]AES

advanced encryption standard,又名rijndael密码,为两位比利时数学家的名字组合。 分组为128bit,密钥为128/192/256bit可选,对应加密轮数10/12/14轮。 基本操作为四种: 字节代换(subBytes transformatio…

计算机网络:数据链路层(VLAN)

今天又学到一个知识,加油! 目录 一、传统局域网的局限(促进VLAN的诞生) 二、VLAN简介 三、VLAN的实现 总结 一、传统局域网的局限(促进VLAN的诞生) 缺乏流量隔离:即使把组流量局域化道一个单一交换机中…

STM32F103RCT6开发板M3单片机教程06--定时器中断

前言 除非特别说明,本章节描述的模块应用于整个STM32F103xx微控制器系列,因为我们使用是STM32F103RCT6开发板是mini最小系统板。本教程使用是(光明谷SUN_STM32mini开发板) STM32F10X定时器(Timer)基础 首先了解一下是STM32F10X…

Linux---远程登录、远程拷贝命令

1. 远程登录、远程拷贝命令的介绍 命令说明ssh远程登录scp远程拷贝 2. ssh命令的使用 ssh是专门为远程登录提供的一个安全性协议,常用于远程登录,想要使用ssh服务,需要安装相应的服务端和客户端软件,当软件安装成功以后就可以使…

智能五子棋1

*一、项目需求* 五子棋是一种简单的黑白棋,历史悠久,起源于中国,后传入日本,在日本被称为“连珠”,是一种老少皆宜的益智游戏。 人工智能五子棋系统的目标用户是一切想致力于研究人机对弈算法理论的相关研究者和一切…

直播江湖:东方甄选与董宇辉的权力游戏

出品| 大力财经 文 | 魏力 近期,围绕东方甄选的小作文事件引起了广泛关注,有人将其解读为一场巧妙策划的事件营销,然而,舆情的不可控性使得事态逐渐演变为一场复杂的利益博弈。 东方甄选与董宇辉的“蜜月期”可以说是双方互相成就…

股票价格预测 | Python实现基于Stacked-LSTM的股票预测模型,可预测未来(keras)

文章目录 效果一览文章概述模型描述源码设计效果一览 文章概述 以股票价格预测为例,基于Stacked-LSTM的股票预测模型(keras),可预测未来。 模型描述 LSTM 用于处理序列数据,如时间序列、文本和音频。相对于传统的RNN,LSTM更擅长捕获长期依赖关系,

Docker插件和扩展:深入Docker功能的完整指南

Docker作为一种流行的容器化技术,不仅令应用程序的部署更为便捷,同时也提供了丰富的插件和扩展机制,以满足更多复杂场景下的需求。本文将深入研究Docker的插件和扩展,提供更为详实和全面的示例代码,助力读者更好地理解…