一般来说,程序每出现一个异常就需要throws 或者try catch语句块进行处理,这样处理异常的方法比较少的情况,还体现不出麻烦,如果需要处理异常的方法比较多的情况下,有一个统一处理异常方法就显得尤其重要,即所有抛出的异常都在一个方法进行处理,这样可以集中、简便,如果需要修改异常处理的方式也比较方便。
spring mvc ,在3.0以上的版本提供了异常统一处理的方式。
使用注释@ExceptionHandler来标明方法是处理异常的,一般定义一个基础类,其他控制类继承该基础类,这样其他控制类的方法抛出异常就会在@ExceptionHandler标明的方法来进行统一处理异常。
基类:
public class BaseController {
@ExceptionHandler({Exception.class})
@ResponseBody
public String exceptionHandler(Exception e,HttpServletRequest request,HttpServletResponse response){
String errorMsg = "";
//handle exception here...
//transfer response message to json string.
String jsonString = Util.toJSON(resp);
return jsonString;
}
}
其中
注释ExceptionHandler可以设置处理需要处理的异常类型
控制类:
@Controller
@RequestMapping(value="other")
public class OtherController extends BaseController{
@RequestMapping(value="handle.htm",method=RequestMethod.POST)
@ResponseBody
public RespModel addConstruction(HttpServletRequest request,HttpServletResponse response) throws Exception{
RespModel resp = new RespModel();
//business handle here...
return resp;
}
}