开启生长之旅!这是我参与「日新方案 12 月更文应战」的第21天,点击查看活动详情

3.10 反常处理****

SpringMVC: HandlerExceptionResolver接口,

该接口的每个完成类 都是反常的一种处理方式:

3.10.1 ExceptionHandlerExceptionResolver

主要供给了@ExceptionHandler注解,并经过该注解处理反常****

//该办法 能够捕获本类中 抛出的ArithmeticException反常

@ExceptionHandler({ArithmeticException.class,ArrayIndexOutOfBoundsException.class })

public String handlerArithmeticException(Exception e) {

System.out.println(e +”============”);

return “error” ;

}

@ExceptionHandler({Exception.class})

publicModelAndView handlerArithmeticException2(Exception e) {

ModelAndView mv= newModelAndView(“error”);

System.out.println(e+”============”+”该@ControllerAdvice中的反常处理办法,能够处理任何类中的反常”);

mv.addObject(“er”, e) ;

returnmv;

}

@ExceptionHandler标识的办法的参数 必须在反常类型(Throwable或其子类) ,不能包括其他类型的参数

反常处理路径:最短优先

假如有办法抛出一个ArithmeticException反常,而该类中 有2个对应的反常处理法你发:

@ExceptionHandler({Exception.class })

public ModelAndView handlerArithmeticException2(Exception e) {}

@ExceptionHandler({ArithmeticException.class })

public ModelAndView handlerArithmeticException1(Exception e) {}

优先级: 最短优先。

@ExceptionHandler默认只能捕获 当时类中的反常办法。****

假如产生反常的办法 和处理反常的办法 不在同一个类中:@ControllerAdvice

总结:假如一个办法用于处理反常,并且只处理当时类中的反常:@ExceptionHandler

假如一个办法用于处理反常,并且处理一切类中的反常: 类前加@ControllerAdvice、 处理反常的办法前加@ExceptionHandler

3.10.2 ResponseStatusExceptionResolver****

ResponseStatusExceptionResolver:自定义反常显示页面 @ResponseStatus

@ResponseStatus(value=HttpStatus.FORBIDDEN,reason=”数组越界222!!!”)

publicclassMyArrayIndexOutofBoundsExceptionextendsException {//自定义反常

}

@ResponseStatus也能够标志在办法前:

@RequestMapping(“testMyException”)

publicString testMyException(@RequestParam(“i”) Integer i) throwsMyArrayIndexOutofBoundsException {

if(i== 3) {

thrownewMyArrayIndexOutofBoundsException();//抛出反常

}

return“success”;

}

@RequestMapping(“testMyException2”)

publicString testMyException2(@RequestParam(“i”) Integer i) {

if(i== 3) {

return“redirect:testResponseStatus”;//跳转到某一个 反常处理办法里

}

return“success”;

}


3.10.3 反常处理的完成类****

DefaultHandlerExceptionResolver:SPringMVC在一些常见反常的基础上(300 500 405),新增了一些反常,例如:

  • @see org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler

* @see #handleNoSuchRequestHandlingMethod

* @see #handleHttpRequestMethodNotSupported :假如springmvc的处理办法限制为post方式,假如实践请求为get,则会触发此反常显示的页面

* @see #handleHttpMediaTypeNotSupported

* @see #handleMissingServletRequestParameter

* @see #handleServletRequestBindingException

* @see #handleTypeMismatch

* @see #handleHttpMessageNotReadable

* @see #handleHttpMessageNotWritable

* @see #handleMethodArgumentNotValidException

* @see #handleMissingServletRequestParameter

* @see #handleMissingServletRequestPartException

* @see #handleBindException

3.10.4 反常处理的完成类

SimpleMappingExceptionResolver:经过装备来完成反常的处理****

<beanclass= “org.springframework.web.servlet.handler.SimpleMappingExceptionResolver” >

<propertyname= exceptionMappings” >

<propkey= “java.lang.ArithmeticException” >

error

<propkey= “java.lang.NullPointerException” >

error

****