面试:全局异常处理

本文介绍了如何在JavaWeb应用中自定义全局异常处理器MyExceptionHandler,使用枚举ExceptionEnum定义异常代码和信息,以及创建继承自RuntimeException的BizException类,用于业务逻辑中的异常抛出和处理。
摘要由CSDN通过智能技术生成

1.首先自定义自己的exceptHandler,在类上添加一个@controllerAdvice 这个注释可以捕获所有异常,在类中添加一个方法直接返回异常即可。

@ControllerAdvice
public class MyExceptionHandler {
    @ExceptionHandler(value =Exception.class)
    @ResponseBody
    public String exceptionHandler(Exception e){
        return "ExceptHandler:全局异常捕获,错误原因>>>"+e.getMessage();
    }
}

2.枚举自己定义的异常编码,和异常信息,BaseError自己定义下,就编码和信息2个值,个人感觉直接用枚举也可以

/**
 * @description: 异常处理枚举类
 */
public enum ExceptionEnum implements BaseError{

    // 数据操作错误定义
    SUCCESS("200", "成功!"),
    BODY_NOT_MATCH("400","请求的数据格式不符!"),

    /**
     * 错误码
     */
    private final String resultCode;
    /**
     * 错误描述
     */
    private final String resultMsg;

    ExceptionEnum(String resultCode, String resultMsg) {
        this.resultCode = resultCode;
        this.resultMsg = resultMsg;
    }

    @Override
    public String getResultCode() {
        return resultCode;
    }

    @Override
    public String getResultMsg() {
        return resultMsg;
    }
}

3.定义业务中使用的异常类,

/**
 * @description: 默认使用的自定义异常类
 */
public class BizException extends RuntimeException{

    private static final long serialVersionUID = 1L;

    /**
     * 错误码
     */
    protected String errorCode;
    /**
     * 错误信息
     */
    protected String errorMsg;

    public BizException() {
        super();
    }

    public BizException(BaseError erro) {
        super(error.getResultCode());
        this.errorCode = error.getResultCode();
        this.errorMsg = error.getResultMsg();
    }

    public BizException(BaseError , Throwable cause) {
        super(error.getResultCode(), cause);
        this.errorCode = error.getResultCode();
        this.errorMsg = error.getResultMsg();
    }

    public BizException(String errorMsg) {
        super(errorMsg);
        this.errorMsg = errorMsg;
    }

    public BizException(String errorCode, String errorMsg) {
        super(errorCode);
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }

    public BizException(String errorCode, String errorMsg, Throwable cause) {
        super(errorCode, cause);
        this.errorCode = errorCode;
        this.errorMsg = errorMsg;
    }


    public String getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }

    @Override
    public Throwable fillInStackTrace() {
        return this;
    }

4.具体使用 这个不建议自己写字符串,可以写到ExceptionEnum枚举中,直接在枚举中拿,而且可以自己添加

 if(user.getName()==null){
        throw  new BizException("-1","用户姓名不能为空!");
    }
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Spring框架中,异常处理是一个非常重要的方面,可以帮助我们更好地处理应用程序中的异常情况。Spring框架提供了多种方式来处理异常,下面是一些常用的方法: 1. 使用 @ExceptionHandler 注解:可以在控制器类中定义一个或多个带有 @ExceptionHandler 注解的方法来处理特定类型的异常。当控制器方法抛出指定类型的异常时,Spring会自动调用对应的异常处理方法。 2. 使用 @ControllerAdvice 注解:可以使用 @ControllerAdvice 注解来定义一个全局异常处理类,该类可以处理整个应用程序中的异常。在该类中,可以使用 @ExceptionHandler 注解来定义具体的异常处理方法。 3. 使用 @ResponseStatus 注解:可以在控制器方法上使用 @ResponseStatus 注解来指定特定的HTTP状态码。当控制器方法抛出异常时,Spring会根据注解中指定的状态码返回响应。 4. 使用 @ControllerAdvice + @ExceptionHandler + ResponseEntity:可以在全局异常处理类中使用 ResponseEntity 来自定义异常响应。通过在异常处理方法中构建 ResponseEntity 对象,可以灵活地设置响应状态码、消息体等信息。 5. 使用 @ControllerAdvice + @ExceptionHandler + ModelAndView:可以在全局异常处理类中使用 ModelAndView 来返回错误页面。通过在异常处理方法中构建 ModelAndView 对象,可以指定要返回的视图名称和模型数据。 以上是一些常用的异常处理方法,根据实际需求选择合适的方式来处理异常。同时,还可以结合其他Spring框架提供的功能,如统一日志记录、全局异常处理器等,来完善异常处理机制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值