SpringBoot全局异常处理及自定义异常
首先定义自定义返回类,如果自己项目中已经有了自定义返回类只需要将后面的代码做相应的修改即可;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 统一API对象返回
* @param <T>
* @Author: TanXJ
* @Date: 2021/10/13 9:31
*/
@Data
@NoArgsConstructor
public class ResultBean<T> {
/** 状态码 */
@ApiModelProperty(value = "状态码", example = "200")
private Integer code;
/** 返回消息 */
@ApiModelProperty(value = "返回消息", example = "操作成功")
private String message;
/** 状态 */
@ApiModelProperty(value = "状态", example = "true")
private boolean status;
/** 返回数据 */
@ApiModelProperty(value = "返回数据", example = "")
private T data;
public ResultBean(Integer code, String message, boolean status, T data) {
this.code = code;
this.message = message;
this.status = status;
this.data = data;
}
public ResultBean(ResultCode resultCode, boolean status, T data) {
this.code = resultCode.getCode();
this.message = resultCode.getMsg();
this.status = status;
this.data = data;
}
public ResultBean(ResultCode resultCode, boolean status) {
this.code = resultCode.getCode();
this.message = resultCode.getMsg();
this.status = status;
this.data = null;
}
public static <T> ResultBean success() {
return new ResultBean<>(ResultCode.OK, true);
}
public static <T> ResultBean message(String message) {
return new ResultBean<>(ResultCode.OK.getCode(), message, true, null);
}
public static <T> ResultBean success(T data) {
return new ResultBean<>(ResultCode.OK, true, data);
}
public static <T> ResultBean fail() {
return new ResultBean<>(ResultCode.ERROR, false);
}
public static <T> ResultBean fail(ResultCode resultCode) {
return new ResultBean<>(resultCode, false);
}
public static <T> ResultBean fail(Integer code, String message) {
return new ResultBean<>(code, message, false, null);
}
public static <T> ResultBean fail(ResultCode resultCode, T data) {
return new ResultBean<>(resultCode, false, data);
}
public static <T> ResultBean fail(Integer code, String message, T data) {
return new ResultBean<>(code, message, false, data);
}
}
创建全局异常处理
import com.newmap.common.response.ResultBean;
import com.newmap.common.response.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
/**
* @ClassName: GlobalExceptionHandler
* @Description: 全局异常处理
* @Author: TanXJ
* @Date: 2022/5/28 19:14
*/
@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 处理自定义的业务异常
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = CustomException.class)
@ResponseBody
public ResultBean bizExceptionHandler(HttpServletRequest req, CustomException e){
log.error("发生业务异常!原因是:{}",e.getMessage());
return ResultBean.fail(e.getCode(),e.getMessage());
}
/**
* 处理运行时异常
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = RuntimeException.class)
@ResponseBody
public ResultBean runtimeExceptionHandler(HttpServletRequest req, RuntimeException e){
log.error("发生运行时异常!原因是:{}",e.getMessage());
return ResultBean.fail(500, e.getMessage());
}
/**
* 处理空指针的异常
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = NullPointerException.class)
@ResponseBody
public ResultBean exceptionHandler(HttpServletRequest req, NullPointerException e){
log.error("发生空指针异常!原因是:",e);
return ResultBean.fail(ResultCode.SYSTEM_ERROR);
}
/**
* 处理其他异常
* @param req
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultBean exceptionHandler(HttpServletRequest req, Exception e){
log.error("未知异常!原因是:",e);
return ResultBean.fail(ResultCode.UNKNOWN_ERROR);
}
}
创建自定义异常处理类,这里只定义了一个自定义异常处理类,在实际的的项目中可以定义多个自定义异常处理类
import com.newmap.common.response.ResultCode;
import lombok.Getter;
/**
* @ClassName: StudentException
* @Description: 自定义异常类
* @Author: TanXJ
* @Date: 2022/5/28 19:09
*/
@Getter
public class CustomException extends RuntimeException {
private Integer code;
private String msg;
public CustomException() {
super();
}
public CustomException(ResultCode resultCode) {
super(resultCode.getMsg());
this.code = resultCode.getCode();
this.msg = resultCode.getMsg();
}
public CustomException(ResultCode resultCode, Throwable cause) {
super(resultCode.getMsg(), cause);
this.code = resultCode.getCode();
this.msg = resultCode.getMsg();
}
public CustomException(String errorMsg) {
super(errorMsg);
this.msg = errorMsg;
}
public CustomException(Integer errorCode, String errorMsg) {
super(errorMsg);
this.code = errorCode;
this.msg = errorMsg;
}
public CustomException(Integer errorCode, String errorMsg, Throwable cause) {
super(errorMsg, cause);
this.code = errorCode;
this.msg = errorMsg;
}
public Integer getErrorCode() {
return code;
}
public void setErrorCode(Integer errorCode) {
this.code = errorCode;
}
public String getErrorMsg() {
return msg;
}
public void setErrorMsg(String errorMsg) {
this.msg = errorMsg;
}
public String getMessage() {
return msg;
}
@Override
public Throwable fillInStackTrace() {
return this;
}
}
代码中应用
@Override
public UserPO add(HttpServletRequest httpServletRequest, UserVO userVO) {
// 检查用户信息是否为空
if(userVO.getUserAccount() == null || userVO.getUserPassword() == null){
throw new CustomException(ResultCode.USER_INFO_IS_NULL);
}
......
SpringBoot全局异常处理及自定义异常的更多相关文章
- Springboot的异常处理与自定义异常
园友们好,元旦很快就到来了,提前祝各位园友们元旦快乐,今天给大家分享一个工作中必用一个知识点,就是使用枚举构建自定义异常并应用于springboot的异常处理器.开始之前我先把这个案例的结构大致说明一 ...
- springboot 全局异常处理
springboot 全局异常处理 研究了半天springboot的全局异常处理,虽然还是需要再多整理一下,但是对于常见的404和500足以可以区分开,能够根据这两个异常分别处理 首先配置视图解析路径 ...
- 【第二十三章】 springboot + 全局异常处理
一.单个controller范围的异常处理 package com.xxx.secondboot.web; import org.springframework.web.bind.annotation ...
- 第二十三章 springboot + 全局异常处理
一.单个controller范围的异常处理 package com.xxx.secondboot.web; import org.springframework.web.bind.annotation ...
- spring boot 全局异常处理及自定义异常类
全局异常处理: 在处理controller层抛出的自定义异常时,可以实现@ControllerAdvice注解捕获,配合@ExceptionHandler来增强所有的@requestMapping方法 ...
- SpringBoot全局异常处理方式
每个项目全局异常处理非常重要, 今天在处理项目架构的时候添加了一个全局异常处理. 大概三种异常情况: 一:在进入Controller之前,譬如请求一个不存在的地址,404错误. 二:在执行@Reque ...
- SpringBoot全局异常处理与定制404页面
一.错误处理原理分析 使用SpringBoot创建的web项目中,当我们请求的页面不存在(http状态码为404),或者器发生异常(http状态码一般为500)时,SpringBoot就会给我们返回错 ...
- SpringBoot 全局异常处理 @RestControllerAdvice +@ExceptionHandler 请求参数校验
ControllerAdvice 指示带注释的类辅助“控制器”. 作为的特殊化@Component,允许通过类路径扫描自动检测实现类. 通常用于定义@ExceptionHandler, @InitBi ...
- springboot全局异常处理(1)
新建一个类 在类上加一个注解即可 @ControllerAdvice /** * 全局错误处理 * @author sys * */ @ControllerAdvice @ResponseBody p ...
- springboot全局异常处理
@Slf4j@ControllerAdvicepublic class RestExceptionHandler extends ResponseEntityExceptionHandler { @E ...
随机推荐
- Java中File类和I/O
目录 File 类 File 构造方法 输入输出(I/O) 字节流与字符流 输入流与输出流 输入输出字节流 构造方法 方法 InputStream 基本方法 public int read() thr ...
- react withRouter高阶组件
作用:把不是通过路由切换过来的组件中,将react-router 的 history.location.match 三个对象传入props对象上 默认情况下必须是经过路由匹配渲染的组件才存在this. ...
- P7448
problem & 双倍经验 & blog 低配版本 没有 Ynoi 标志性算法卡常,这点差评. 拆解问题 定义 \(lst_i\) 为上一个和 \(i\) 号点相同的位置. 由于几个 ...
- windows 开发者注册后写代码,这个给钱吗?
- 认真学习CSS3-问题收集-101号-莫名其妙的row行高
其他人都有事情,有些事情只好自己上阵,自己做,最踏实! 做了两个基本一样的页面,都是采用bootsrap+jquey+js的技术,业务内容就是简单的查询,加上一些简单的效果,没有啥特别的内容. 由于历 ...
- 实验6.交换机MAC地址表简单实验
# 实验6.交换机Mac地址表 本实验用于验证和测试交换机的Mac地址表的特性. 实验组 测试 测试在PC1没有pingPC2时,此时mac表为空 当PC1ping一个其他的ip而不是PC2时,无论是 ...
- 在Linux驱动中使用input子系统
在Linux驱动中使用输入子系统 参考: https://www.cnblogs.com/lifexy/p/7553861.html https://www.cnblogs.com/linux-37g ...
- Android系统启动:1-综述
Android系统启动:综述 原文:http://gityuan.com/2016/02/01/android-booting/ 基于Android 6.0的源码剖析, Android启动过程概述 概 ...
- Go 使用原始套接字捕获网卡流量
Go 使用原始套接字捕获网卡流量 Go 捕获网卡流量使用最多的库为 github.com/google/gopacket,需要依赖 libpcap 导致必须开启 CGO 才能够进行编译. 为了减少对环 ...
- Spring Boot 整合
什么是Spring Boot? 百度百科一下 创建Spring Boot项目 通过官网来创建(了解) 这里面的创建方式不做过多说明,只需要在 官网 里面创建好了,然后下载解压,就可以了,我这里直接使用 ...