Spring MVC可以通过统一的异常处理机制来处理应用程序中遇到的异常,统一处理异常可以使应用程序更加健壮,并且在开发过程中可以统计异常信息,方便排查错误。
Spring MVC框架中异常处理是通过HandlerExceptionResolver接口来处理的,在这个接口中我们可以自定义异常处理的方式,这个接口中有两个非常重要的方法:resolveException和supports。
- supports方法:判断当前的异常是否可以被该异常解析器处理;
- resolveException方法:真正的解析异常的方法。
定义自定义异常处理器
我们可以通过实现HandlerExceptionResolver接口,自定义一个Spring MVC的异常处理器。
public class MyExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
String message = null;
// 判断异常类型做出不同的处理方式
if (ex instanceof NullPointerException) {
message = "出现空指针异常了";
} else if (ex instanceof ArithmeticException) {
message = "出现除数为0异常了";
} else {
message = "出现其他异常了";
}
ModelAndView mv = new ModelAndView();
mv.addObject("errorMsg", message);
mv.setViewName("error");
return mv;
}
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}
}
上面的代码中,我们通过实现HandlerExceptionResolver接口,自定义一个异常处理器MyExceptionHandler,并实现了其中的两个方法resolveException和supports,其中resolveException方法是用来处理异常的核心方法。
在resolveException方法中,我们可以通过request和response对象拿到request的URI和请求参数,然后根据异常类型,在视图中返回指定的异常页面。在上面的例子中,我们假设可能出现NullPointerException和ArithmeticException两种异常,并对这两种异常做了不同的处理方式,如果抛出其他异常,我们会返回公共的异常处理页面。
注册自定义异常处理器
定义完成自定义的异常处理器后,就需要在Spring MVC的配置文件中进行配置和注册。在Spring MVC的配置文件中配置如下:
<!-- 配置自定义异常处理器 -->
<bean id="handlerExceptionResolver" class="com.example.handler.MyExceptionHandler" />
示例1
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test() {
int a = 1/0; // 抛出算术异常
return "test";
}
当我们在浏览器上访问“/test”时,就会出现“错误信息:出现除数为0异常了”字样的错误页面。
示例2
@RequestMapping(value = "/test", method = RequestMethod.POST)
public String test(@RequestParam("file") MultipartFile file) throws IOException {
byte[] bytes = file.getBytes();
if (bytes == null || bytes.length == 0) {
throw new RuntimeException("上传的文件内容不能为空!");
}
return "test";
}
上面的代码中,我们假设在文件上传接口中,没有选择文件或上传的文件内容为空时,就抛出一个RuntimeException异常。当出现这种异常时,自定义的异常处理器会返回一个公共的错误处理页面,这个页面中,我们会在页面上显示“错误信息:出现其他异常了”字样。
以上就是Spring MVC如何进行异常处理的攻略和两个示例的说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc如何进行异常处理 - Python技术站