Spring MVC 异常处理

                                     Spring MVC 异常处理

2.1. Spring MVC 异常概述

实际项目中我们经常会采用分层架构设计程序,每一层都可能会有异常,假如异常信息没有处理,可能会选择抛出,假如这些被抛出的异常与具体业务相关,那到控制层以后我们一般都进行相应的处理(处理方式应该相对友好)

在Spring mvc 项目中,边界出现异常以后我们通常会在Controller中进行处理,常用分层架构中的异常分析:

Spring MVC 异常处理_第1张图片

 

2.2. Spring MVC 异常处理

①在spring中处理异常时,通常会在Controller中定义具体的异常处理方法,这个方法上使用@ExceptionHandler注解进行描述.例如在指定Controller中定义异常处理方法:

@ExceptionHandler(value=Exception.class)
@ResponseBody
public String handleException(Exception e){
    System.out.println("局部异常处理");
    return e.getMessage();
}

当多个异常处理类中很多异常处理的方式是相同的,还可以将这个异常处理方法提取到父类,以实现方法的重用。

 

②假如不希望将共性的异常处理方法提取到父类,还可以在外部定义一个全局的异常处理类,这个类使用@ControllerAdvice注解进行修饰.然后在这个类中定义具体的异常处理方法,这些方法再使用@ExceptionHandler进行修饰,例如

@ControllerAdvice
public class AdviceExceptionHandler {
    @ExceptionHandler(Throwable.class)
    @ResponseBody
    public String handlerException(Throwable e){
    System.out.println("全局的异常处理");
        return e.getMessage();
    }
}

Spring MVC中异常处理机制总结:

1) 为什么要进行异常处理?(提高系统的容错能力,让系统表现的更加友好)

2) Spring MVC中异常处理的方式?(局部的,全局的)

3) 局部方式异常处理如何实现?(Controller类中直接定义异常处理方法,使用@ExceptionHandler进行修饰)

4) 全局方式异常处理如何实现?(通过继承将共性提取到父类或者通过@ControllerAdvice注解修饰类,然后类中定义异常处理方法)

5) 出现异常后,异常处理的具体机制是怎样的?首先会在当前Controller(包含父类)中查找有没有定义异常处理方法,假如有则查看注解中定义的异常类型是否与当前异常类型相匹配,假如匹配则直接处理,假如不匹配则查看当前类中有没有父类类型的异常处理方法与当前异常匹配,假如有则直接处理,没有则找全局异常处理。全局也没有则直接不友好的输出错误信息

说明:实际项目中在controller的方法中除了要对正确的业务数据进行封装之外,还会对异常信息进行封装(例如封装到JsonResult),然后转换为json格式的字符串,输出到客户端。

你可能感兴趣的:(框架,Spring,MVC,异常处理)