美文网首页
spring/springmvc 全局异常处理

spring/springmvc 全局异常处理

作者: G先生_海林 | 来源:发表于2018-09-18 11:39 被阅读22次

1.在项目中为什么要统一异常处理

  • 当异常返回到前端页面的时候可以统一处理,避免前端无法处理异常
  • 不做统一异常处理,在controller 层就会有很多重复的代码
  • 提高效率

2.如何做统一异常处理?

  • 创建单独的异常处理类结合注解
  • 自定义异常类继承 RuntimeException
  • Controller 中使用 自定义异常

2.1统一异常处理类

@ControllerAdvice: @ControllerAdvice是一个@Component,用于定义@ExceptionHandler,@InitBinder和@ModelAttribute方法,适用于所有使用@RequestMapping方法,可以将异常处理和controller层分开 需要配合 @ExceptionHandler 使用

代码实例:

/**
***@author hai6
**@ControllerAdvice 处理所有controller 中所有没有被try catch 包裹的注解
*/
'''

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public Map<String, Object> handlerException(){
        Map<String, Object>  map= new HashMap<String,Object>();
        map.put("code", 500);
        map.put("msg", "请稍后再试");
        return map;
    }
    @ExceptionHandler(BusinessException.class)
    @ResponseBody
    public Map<String, Object> handlerBusinessException(BusinessException business){
        Map<String, Object>  map= new HashMap<String,Object>();
        map.put("code", business.getCode());
        map.put("msg",business.getMsg());
        return map;
    }
}

2.2自定义异常类

继承RuntimeException 也可以继承Exception 运行时的异常我们一般都会继承 RuntimeException

异常继承.png

代码实例:

/**
 * @author hai6
 *
 */
public class BusinessException extends RuntimeException{
 
    private static final long serialVersionUID = 8751160949113891470L;
    private int code;
    private String msg;
    private String desc;
    
    
    public BusinessException(){}
    
    
    public BusinessException(int code, String msg) {
        
        this.code=code;
        this.msg=msg;
    }
    
    
    
    public BusinessException(int code, String msg, String desc) {
        super();
        this.code = code;
        this.msg = msg;
        this.desc = desc;
    }
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
}

2.3 在controller 层中使用全局异常


/**
 * @author hai6
 * @date 2018年9月16日下午2:56:39
 *
 */

@Controller
public class WebAppController {
    
    @RequestMapping("/test")
    @ResponseBody
    public String test(){
        //运行时异常
        int i=1;
        int b=i/0;//有异常
        return "test";
    }
    
    @RequestMapping("/test2")
    @ResponseBody
    public String test2() throws BusinessException{
        //抛出异常
        throw  new BusinessException(500,"出错啦");
    }
}

运行效果如下


test2.png
test.png

思考:在项目中我们有很多自定义的异常信息,请思考一下如果异常信息增多你会如何设计并处理异常会更加简洁?

相关文章

  • spring/springmvc 全局异常处理

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

  • Spring Mvc 异常处理

    SpringMvc 异常全局解读 异常处理思路 首先来看一下在springmvc中,异常处理的思路 如上图所示,系...

  • 深入Spring Boot (九):Web应用统一异常处理

    默认情况下,Spring Boot为基于SpringMVC的Web应用提供了全局统一异常处理,本篇将深入介绍默认的...

  • SpringMVC全局异常处理

    在日常的开发过程中,你肯定遇到过页面报500的问题,这个时候如果我想一想就会觉得害怕,我们的项目如果真的在线上出现...

  • springmvc全局异常处理

    首先定义一个异常类,BusinessException,这个类必须继承RuntimeException类,不然会一...

  • springmvc全局异常处理

    其实用springmvc来实现全局异常处理我在一起的学习demo中也用到了,今天因为有些地方不是那么清晰了,所以干...

  • SpringMvc处理全局异常

    处理全局异常的方法主要为两种: 实现HandlerExceptionResolver接口 @ControllerA...

  • SpringMVC 全局异常处理

    创建ExceptionResolver实现HandlerExceptionResolver接口: 添加@Compo...

  • Spring Boot 2 Webflux的全局异常处理

    SpringMVC的异常处理 Spring 统一异常处理有 3 种方式,分别为: 使用@ExceptionHand...

  • 全局异常处理

    首先,处理思路,嗯对,就是想想: 其次,创建全局异常处理器,开写 最后,Springmvc中配置异常处理器 ok!...

网友评论

      本文标题:spring/springmvc 全局异常处理

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