zoukankan      html  css  js  c++  java
  • SSM 统一异常处理

    SSM 统一异常处理

    spring创建中, 处理异常可以使用try-cache处理, 也可以使用spring提供的统一异常处理

    在spring中, 统一处理异常有2中方式

    1. 注解方式

      @ExceptionHandler 作用于方法上

      @controlleradvice 作用于类上

    2. 接口方式

      HandlerExceptionResolver 接口

    注解方式

    注解方式用起来也是比较方便的, 注解方式有两种

    1. @ExceptionHandler单独使用, 前提是抛出异常的方法和处理异常的方法在同一个controller下
    2. @controlleradvice@ExceptionHandler 配合使用, 如果当前controller下没有处理异常的方法, 则去找@controlleradvice描述的类下面处理异常的方法

    单独使用@ExceptionHandler

    此方式仅限于处理异常的方法和抛出异常的方法在同一个controller里

    次注解的参数是可以处理异常的类型字节码对象, 例如写RuntimeException.class则处理此异常以及其子类的异常, 处理异常的方法参数和注解的参数类型一般来说是一致的.

    @Controller
    public class GlobalController {
    
       /**
         * 用于处理异常的
         */
        @ExceptionHandler({MyException.class})
        public String exception(MyException e) {
            System.out.println(e.getMessage());
            e.printStackTrace(); // 控制台打印报错信息
            return "exception";
        }
    
        // 此请求会抛出异常
        @RequestMapping("/index")
        public String test() {
            throw new MyException("出错了!");
            return "index";
        }
    } 
    

    使用 @ControllerAdvice+ @ ExceptionHandler 注解

    @ ExceptionHandler 需要进行异常处理的方法必须与出错的方法在同一个Controller里面。那么当代码加入了 @ControllerAdvice,则不需要必须在同一个 controller 中了。这也是 Spring 3.2 带来的新特性。从名字上可以看出大体意思是控制器增强。 也就是说,@controlleradvice + @ ExceptionHandler 也可以实现全局的异常捕捉。

    /**
     * @ControllerAdvice 注解描述的类, spring mvc会分为他是
     * 	一个控制层全局异常的处理
     */
    @ControllerAdvice
    public class GlobalExceptionHandler {
    	
    	/**
    	 * @ExceptionHandler 注解描述的方法为异常处理方法,
    	 * 	次注解中定义的异常类型, 为这个方法可以处理的异常类型, 它可以处理
    	 * 	此异常以及这个异常类型的子类类型的异常
    	 * @param e
    	 * @return
    	 */
    	@ExceptionHandler(RuntimeException.class)
    	@ResponseBody // 告诉spring mvc最终相应结果转换为json格式返回, 如果返回的是页面可不写次注解
    	public JsonResult doHandleRuntimeException(RuntimeException e) {
    		e.printStackTrace();
    		return new JsonResult(e);
    	}
        
        // .....等多个处理异常的方法
    }
    

    实现 HandlerExceptionResolver 接口

    即mvc中所有的异常都可以在这里进行处理

    @Component
    public class ExceptionTest implements HandlerExceptionResolver{
    
        /**
         * TODO 简单描述该方法的实现功能(可选).
         * @see org.springframework.web.servlet.HandlerExceptionResolver#resolveException(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object, java.lang.Exception)
         */
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
                Exception ex) {
            System.out.println("This is exception handler method!");
            return null;
        }
    }
    
  • 相关阅读:
    后台数据显示在网页(通过ajax获取内容)二
    获取后台数据显示在网页(一)
    访问后台方法
    input的placeholder字体大小无法修改?
    cssText()
    flex属性值----弹性盒子布局
    多栏布局
    怎么在ng-repeat生成的元素上操作dom
    css实现一行文字居中,多行文字左对齐
    变形属性 transform
  • 原文地址:https://www.cnblogs.com/zpKang/p/13292846.html
Copyright © 2011-2022 走看看