zoukankan      html  css  js  c++  java
  • 后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节7(核心对象,异常处理器,ExceptionHandlerExceptionResolver & ResoponseStatusExceptionResolver)

    1、概念

      它的概念是建立异常类型与方法之间的映射关系。即出错之后,运行指定的方法。

      当抛出异常之后,会查找有@ExceptionHandler注解的方法,默认情况下只会在当前Controller类中查找。若要设置全局的, 可以配置Controller的切面。具体做法把异常处理的方法提取到公共类中,在类上添加@ControllerAdvice注解,在方法上添加@ExceptionHandler注解。。

      @ExceptionHandler只有一个属性value,值为异常类型对应的Class类集合。

      当value属性为空时,相当于默认值,会处理所有的异常。

      若value值重复时,即一个exception 类型有多个方法与之对应时,抛出IllegalStateException。

      当异常抛出,被HandlerExceptionResolver处理之后,抛出的异常被捕获,请求会被视为正常结束,返回的状态码为200。若想返回特定的响应码,可以配合@ResponseStatus注解。

    2、使用

      第一步,注入ExceptionHandlerExceptionResolver,查看dispatcher.properties,它是默认存在的,无需额外的配置。

      第二步,编写方法handlerException,标注@ExceptionHandler,value属性指定异常类型。

      注:@ControllerAdvice相当于AOP中的advice

    3、示例

      若配置适用于单个Controller,示例如下

    // 请求的方法
    @GetMapping("/test/exception")
    public String divideNumber() {
    	System.out.println(1 / 0);
    	return "";
    }
    
    // 处理异常的方法
    @ExceptionHandler(value = ArithmeticException.class)
    public ModelAndView resolve() {
    	return new ModelAndView("error/arithmeticException");
    }

      若配置适用于全局的异常处理,示例如下:

    // 相当于AOP中的advice
    @ControllerAdvice
    public class ExceptionController {
    	/**
    	 * 
    	 * @Title: resolve
    	 * @Description:解决异常的方法
    	 * @return
    	 */
    	@ExceptionHandler(value = ArithmeticException.class)
    	public ModelAndView resolve() {
    		return new ModelAndView("error/arithmeticException");
    	}
    }

    4、ResponseStatusExceptionResolver

      它的概念是建立异常类型与响应码之间的映射关系,若没有上述的ExceptionResolver,Web容器会根据响应码生成特定的页面,例如最常见的404,501。若使用上述的ExceptionResolver,它只会改变响应码的值。

      ResponeStatusExceptionResolver会根据@ResponseStatus注解的code属性值返回响应码

      当@ResponseStatus标注在异常类上时,它只适用于自定义异常。Java内置,第三方的异常类型无法修改,例如NullPointerException

      当@ResponseStatus标注在ExceptionHandler的handler方法上时,它适用于该方法匹配的所有异常。

      当@ResponseStatus标注在@RequestMapping的方法上时,设置方法的响应码,无论方法是否正常结束。

      使用时需要注入ResponeStatusExceptionResolver,它是默认注入的。

  • 相关阅读:
    javascript闭包和作用域链
    关于git的简单实用命令
    springMVC配置Json
    Python基础教程(010)--第一个程序Hello Python
    Python基础教程(009)--Python程序的格式以及扩展名
    Python基础教程(008)--第一个Python程序
    Python基础教程(007)--Python的优缺点
    Python基础教程(006)--Python的特点
    Python基础教程(005)--为什么要学习Python?
    Python基础教程(004)--Python的设计哲学
  • 原文地址:https://www.cnblogs.com/rain144576/p/12903067.html
Copyright © 2011-2022 走看看