网站常识,手机软件设计用什么软件,如何做一个自己的app,网站一年要多少钱定义错误页面
SpringBoot 默认的处理异常的机制#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会像/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicExceptionController 来处理/error 请求#xff0c;然后跳转到…定义错误页面
SpringBoot 默认的处理异常的机制SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会像/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicExceptionController 来处理/error 请求然后跳转到默认显示异常的页面来展示异常信息 如 果 我 们 需 要 将 所 有 的 异 常 同 一 跳 转 到 自 定 义 的 错 误 页 面 需 要 在src/main/resources/templates 目录下创建 error.html 页面。注意名称必须叫 error ExceptionHandler 处理
针对特定的异常做出不同的处理我们可以通过ExceptionHandle来处理实现具体如下
Controller
public class UserController {/*** 模拟 NullPointerException* return*/RequestMapping(/show1)public String showInfo(){String str null;str.length();return index;}/*** 模拟 ArithmeticException* return*/RequestMapping(/show2)public String showInfo2(){int a 10/0;return index;}/*** java.lang.ArithmeticException* 该方法需要返回一个 ModelAndView目的是可以让我们封装异常信息以及视图的指定* 参数 Exception e:会将产生异常对象注入到方法中*/ExceptionHandler(value{java.lang.ArithmeticException.class})public ModelAndView arithmeticExceptionHandler(Exception e){ModelAndView mv new ModelAndView();mv.addObject(error, e.toString());mv.setViewName(error1);return mv;}/*** java.lang.NullPointerException* 该方法需要返回一个 ModelAndView目的是可以让我们封装异常信息以及视图的指定* 参数 Exception e:会将产生异常对象注入到方法中*/ExceptionHandler(value{java.lang.NullPointerException.class})public ModelAndView nullPointerExceptionHandler(Exception e){ModelAndView mv new ModelAndView();mv.addObject(error, e.toString());mv.setViewName(error2);return mv;}
} 错误页面
!DOCTYPE html
html langen
headmeta charsetUTF-8title错误页面/title
/head
body
出错了请与管理员联系。。。错误提示页面-ArithmeticExceptionbr
span th:text${error}/span
/body
/html
!DOCTYPE html
html langen
headmeta charsetUTF-8title错误页面/title
/head
body
出错了请与管理员联系。。。错误提示页面-NullPointerException br
span th:text${error}/span
/body
/html ControllerAdviceExceptionHandler处理
第二种处理方式中异常处理的代码和业务代码放在一个类中了这种方式耦合性太强了最好是将业务和异常处理的代码分离开这时我们可以定义一个专门的异常处理类通过注解ControllerAdvice来实现。具体如下:
ControllerAdvice
public class GlobalException {/*** java.lang.ArithmeticException* 该方法需要返回一个 ModelAndView目的是可以让我们封装异常信息以及视图的指定* 参数 Exception e:会将产生异常对象注入到方法中*/ExceptionHandler(value{java.lang.ArithmeticException.class})public ModelAndView arithmeticExceptionHandler(Exception e){ModelAndView mv new ModelAndView();mv.addObject(error, e.toString() -- advice);mv.setViewName(error1);return mv;}/*** java.lang.NullPointerException* 该方法需要返回一个 ModelAndView目的是可以让我们封装异常信息以及视图的指定* 参数 Exception e:会将产生异常对象注入到方法中*/ExceptionHandler(value{java.lang.NullPointerException.class})public ModelAndView nullPointerExceptionHandler(Exception e){ModelAndView mv new ModelAndView();mv.addObject(error, e.toString() -- advice);mv.setViewName(error2);return mv;}
}
控制器中实现
Controller
public class UserController {/*** 模拟 NullPointerException* return*/RequestMapping(/show1)public String showInfo(){String str null;str.length();return index;}/*** 模拟 ArithmeticException* return*/RequestMapping(/show2)public String showInfo2(){int a 10/0;return index;}
} SimpleMappingExceptionResolver处理
我们还可以通过SimpleMappingExceptionResolver将具体的异常和错误页面指定对应关系这样就不用每个异常都单独写一个方法了。
Configuration
public class GlobalException {/*** 该方法必须要有返回值。返回值类型必须是SimpleMappingExceptionResolver*/Beanpublic SimpleMappingExceptionResolvergetSimpleMappingExceptionResolver(){SimpleMappingExceptionResolver resolver newSimpleMappingExceptionResolver();Properties mappings new Properties();/*** 参数一异常的类型注意必须是异常类型的全名* 参数二视图名称*/mappings.put(java.lang.ArithmeticException, error1);mappings.put(java.lang.NullPointerException,error2);//设置异常与视图映射信息的resolver.setExceptionMappings(mappings);return resolver;}
}
自定义HandlerExceptionResolver处理
最后我们还可以通过实现HandlerExceptionResolver 接口来根据不同异常类型来动态处理异常。
Configuration
public class GlobalException implements HandlerExceptionResolver {/*** param httpServletRequest* param httpServletResponse* param o* param e* return*/Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {ModelAndView mv new ModelAndView();//判断不同异常类型做不同视图跳转if (ex instanceof ArithmeticException) {mv.setViewName(error1);}if (ex instanceof NullPointerException) {mv.setViewName(error2);}mv.addObject(error, ex.toString());return mv;}
}