美文网首页
统一异常处理,自定义异常处理

统一异常处理,自定义异常处理

作者: 任笙_8b8c | 来源:发表于2020-07-15 21:25 被阅读0次
在面试过程中面试官通常会问,你们项目中处理异常是怎么处理的?
源码讲解https://blog.csdn.net/qq_36665310/article/details/106899947

异常处理方式一. @ExceptionHandler
异常处理方式二. 实现HandlerExceptionResolver接口
异常处理方式三. @ControllerAdvice+@ExceptionHandler
三种方式比较说明
说完这个就可以说我在以前的公司都是一路向上抛,然后我们会自定义异常类来实现统一异常处理,这种方式实现比较简单直接.主要是用@ControllerAdvice注解加在类上,
在方法上加一个@ExceptionHandler指定异常类型的字节码,如果一旦出现异常这个异常类就能捕获到异常,如果符合的设置字节码类型,那就会执行该方法的逻辑代码.

实现方式1(@ExceptionHandler):
@ControllerAdvice
public class BaseExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public Result error(Exception e){
        e.printStackTrace();        
        return new Result(false, StatusCode.ERROR, "执行出错");
    }
}

注解解释:

@ControllerAdvice : 声明此类是一个增强类
@ExceptionHandler(value = Exception.class) :指定需要捕获的异常的字节码

捕获自定义异常

我们的异常信息类UserRuntimeException并继承RuntimeException:

package com.tang.xuethead.Controller;

/**
 *
 * @author   Sir.tang
 * @return      自定义异常类
 * @exception
 * @date    2021/4/23 11:00
 */
public class UserRuntimeException extends RuntimeException{
/*
1. 尽量为每一个需要序列化的类自定义serialVersionUID值,这样可避免因为Class中字段的修改而带来的反序列化异常。
2. 尽量不要修改序列化类中的字段类型,如果一定要修改,请重新序列化后再反序列化。
3. 如果要为序列化的类中忽略某个字段,可添加transient关键字
*/
    private static final long serialVersionUID = 1L;  /序列化

    private String id;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public UserRuntimeException(String id, String message) {
        super(message);
        this.id = id;
    }
}

 //自定义异常
 @ExceptionHandler(UserRuntimeException.class)
 @ResponseBody
  public Map<String, Object> TangExceptions(UserRuntimeException ex){

     result.put("id", ex.getId());
     result.put("msg", ex.getMessage());
     return result;
 }

触发自定义异常

   //前台传入id过来
    @GetMapping("/{id}/{name}")
    public String getUserById(@PathVariable String id,@PathVariable String name) {
        if(!id.equals("123456")) {
       //触发自定义异常类 
            throw new UserRuntimeException(id,"id not found");
        }

        return id+name;
    }

如果程序走这个异常被我们捕获 就会执行下面的代码逻辑返回一个Result 对象到前端,进行展示.

相关文章

  • HandlerExceptionResolver原理分析

    通常在项目中我们都会做统一的异常处理,那么今天我们就来分析下自定义异常处理的原理。 若有不知道怎么自定义统一的异常...

  • ASP .NET Core Web API_05_异常处理

    默认异常处理 自定义异常处理

  • 异常处理与分析

    1、系统对异常的处理使用统一的异常处理流程: 1、自定义异常类型。 2、自定义错误代码及错误信息。 3、对于可预知...

  • 2020-06-27【异常】

    异常体系 JVM的默认处理方案 异常处理 自定义异常

  • 统一异常处理,自定义异常处理

    在面试过程中面试官通常会问,你们项目中处理异常是怎么处理的? 源码讲解https://blog.csdn.net/...

  • springMVC异常处理

    异常的处理 自定义异常 自定义的异常处理类 当controller中出现异常时,使用自定义异常进行捕获

  • spring/springmvc 全局异常处理

    1.在项目中为什么要统一异常处理 当异常返回到前端页面的时候可以统一处理,避免前端无法处理异常 不做统一异常处理,...

  • springboot全局异常处理

    一、单个controller范围的异常处理/** 统一异常处理 @return*/@RequestMapping(...

  • python——异常处理

    异常处理 异常传递 抛出自定义异常 异常处理中抛出异常 模块 也可以使用这个导入所有的东西 name:是系统自定义...

  • PHP异常的捕获及处理

    系统自带异常处理 自定义异常处理 捕捉多个异常 日志记录 备注: register_shutdown_functi...

网友评论

      本文标题:统一异常处理,自定义异常处理

      本文链接:https://www.haomeiwen.com/subject/ybajhktx.html