做网站页面的框架,哪个网站可以帮助做数学题,做网站联系我们在那个板块里面,网站做多个镜像1.SpringMVC 异常的处理流程 异常分为编译时异常和运行时异常#xff0c;编译时异常我们 try-cache 进行捕获#xff0c;捕获后自行处理#xff0c;而运行时异常是不 可预期的#xff0c;就需要规范编码来避免#xff0c;在SpringMVC 中#xff0c;不管是编译异常还是运行…1.SpringMVC 异常的处理流程 异常分为编译时异常和运行时异常编译时异常我们 try-cache 进行捕获捕获后自行处理而运行时异常是不 可预期的就需要规范编码来避免在SpringMVC 中不管是编译异常还是运行时异常都可以最终由 SpringMVC提供的异常处理器进行统一处理这样就避免了随时随地捕获处理的繁琐性。 SpringMVC 处理异常的思路是一路向上抛都抛给前端控制器 DispatcherServlet DispatcherServlet 在调 用异常处理器ExceptionResolver进行处理如下图 2.SpringMVC 的异常处理方式 SpringMVC 提供了以下三种处理异常的方式
简单异常处理器使用SpringMVC 内置的异常处理器处理SimpleMappingExceptionResolver自定义异常处理器实现HandlerExceptionResolver接口自定义异常进行处理注解方式使用ControllerAdvice ExceptionHandler 来处理 1.使用SimpleMappingExceptionResolver处理一些简单异常配置开启SimpleMappingExceptionResolver 并指定异常捕获后的处理动作当发生了异常后会被 SimpleMappingExceptionResolver 处理跳转到我们 配置的错误页面error.html给用户进行友好展示 !--配置简单异常处理器-- bean classorg.springframework.web.servlet.handler.SimpleMappingExceptionResolver !-- 异常捕获后动作展示视图 -- property namedefaultErrorView value/error.html/ /bean 可以在配置SimpleMappingExceptionResolver时指定一些参数例如异常的类型 bean classorg.springframework.web.servlet.handler.SimpleMappingExceptionResolver property namedefaultErrorView value/error.html/ property nameexceptionMappings props !-- 配置异常类型对应的展示视图 -- prop keyjava.lang.RuntimeException/error.html/prop prop keyjava.io.FileNotFoundException/io.html/prop /props /property /bean 注解方式配置简单映射异常处理器
Bean
public SimpleMappingExceptionResolver simpleMappingExceptionResolver(){//创建SimpleMappingExceptionResolverSimpleMappingExceptionResolver resolver new SimpleMappingExceptionResolver();//设置默认错误展示视图resolver.setDefaultErrorView(/error.html);//定义Properties设置特殊异常对应的映射视图Properties properties new Properties();properties.setProperty(java.lang.RuntimeException,/error.html);properties.setProperty(java.io.FileNotFoundException,/io.html);resolver.setExceptionMappings(properties);return resolver;
} 2.自定义异常处理器实现HandlerExceptionResolver接口自定义异常处理器可以完成异常逻辑的处理
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {Override//参数Object是当前目标方法处理器对象HandlerMethodpublic ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView modelAndView new ModelAndView();modelAndView.setViewName(/error.html);return modelAndView;}
}
交给Spring管理异常处理器 bean classcom.fly.exception.MyHandlerExceptionResolver/bean 自定义异常处理器返回Json格式字符串信息
Component
public class MyHandlerExceptionResolver implements HandlerExceptionResolver {Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {//编写要返回的json格式的字符串String jsonStr {\code\:0,\message\:\error\,\data\:\\};try {httpServletResponse.getWriter().write(jsonStr);} catch (IOException e1) {e1.printStackTrace();}return null;}
} 3.使用注解 ControllerAdvice ExceptionHandler 配置异常ControllerAdvice 注解本质是一个 Component也会被扫描到与此同时具备AOP功能默认情况下对所有的Controller都进行拦截操作 拦截后干什么呢就需要在结合ExceptionHandler、InitBinder、ModelAttribute 注解一起使用了此 处我们讲解的是异常所以是ControllerAdvice ExceptionHandler的组合形式
编写全局异常处理器类使用ControllerAdvice标注且ExceptionHandler指定异常类型
ControllerAdvice
public class GlobalExceptionHandler {ExceptionHandler(RuntimeException.class)public ModelAndView runtimeHandleException(RuntimeException e){System.out.println(全局异常处理器执行....e);ModelAndView modelAndView new ModelAndView(/error.html);return modelAndView;}ExceptionHandler(IOException.class)ResponseBodypublic ResultInfo ioHandleException(IOException e){//模拟一个ResultInfoResultInfo resultInfo new ResultInfo(0,IOException,null);return resultInfo;}
}
如果全局异常处理器响应的数据都是Json格式的字符串的话可以使用RestControllerAdvice替代 ControllerAdvice 和 ResponseBody
RestControllerAdvice
public class GlobalExceptionHandler {ExceptionHandler(RuntimeException.class)public ResultInfo runtimeHandleException(RuntimeException e){//模拟一个ResultInfoResultInfo resultInfo new ResultInfo(0,RuntimeException,null);return resultInfo;}ExceptionHandler(IOException.class)public ResultInfo ioHandleException(IOException e){//模拟一个ResultInfoResultInfo resultInfo new ResultInfo(0,IOException,null);return resultInfo;}
}
3.SpringMVC 常用的异常解析器
接口/类说明HandlerExceptionResolver异常处理器类的顶级接口实现了该接口的类都会作为异常处理器类MyHandlerExceptionResolver自定义的处理器类实现了HandlerExceptionResolver接口HandlerExceptionResolverComposite异常解析器混合器内部存在集合存储多种异常解析器SimpleMappingExceptionResolver简单映射异常处理器可以配置异常与对应的错误视图ExceptionHandlerExceptionResolver异常处理器异常解析器默认会被注册到Spring容器中ExceptionHandler方式 异常处理就是该解析器解析的DefaultHandlerExceptionResolver默认处理器异常解析器所有异常处理器都不匹配时最后执行的异常处理器ResponseStatusExceptionResolver响应状态异常解析器结合使用ResponseStatus标注的异常使用