为基础控制器类添加通知,统一处理多个控制器类抛出的异常:
1.在自定义异常类中添加@ResponseStatus注解,将映射为某一个http状态码
@ResponseStatus(value=HttpStatus.EXPECTATION_FAILED, reason="can't upload")
public class FailToUploadException extends RuntimeException {
}
2.控制器通知类@ControllerAdvice,统一处理所有控制器的异常。注意@ControllerAdvice 使用了@Component 注解,所以还是要在配置类中添加扫描@ControllerAdvice 所在的包
3.编写方法添加@ExceptionHandler,返回一个视图名称。
@ControllerAdvice
public class AllExceptionHandler {
/**
* @ExceptionHandler 方法
* 当抛出FailToUploadException异常时,就会执行这个方法
* @return
*/
@ExceptionHandler(FailToUploadException.class)
public String failToUploadHandler() {
return "fail";//异常则返回fail.jsp 视图
}
}
4.Controller 中的处理器方法
@RequestMapping(value = "/fileupload", method = RequestMethod.POST)
public String processFileUplaod(@RequestPart("picture") MultipartFile picture) {
try {
//假如有错误
} catch (Exception e) {
e.printStackTrace();
throw new FailToUploadException();//抛出我们自定义的含@ResponseStatus 的异常类
}
return "ok";//正常返回ok.jsp视图
}