利用springmvc自带的异常处理机制, 自定义了一个异常处理类. 经测试:
- 1/0抛的
RuntimeException
能够被捕获到. - 自定义异常类, 然后手动抛的, 也能够捕获到.
- 但是mysql异常并没有走到异常处理类中.(如
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
)
异常处理类:
@ControllerAdvice
public class CustomerExceptionResolver implements HandlerExceptionResolver {
@ExceptionHandler(Exception.class)
@ResponseBody
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) {
e.printStackTrace();
//将异常输出到日志
log.error("异常:",e);
....
service方法:
public ResponseResult selectByName4Smart(String name) throws CustomException {
//调用mapper的查询方法
//由于连不上mysql服务, 这里会报异常
//期望的是他能够被异常处理类捕获
List<String> certNos = customerMapper.selectCertNosLikeName(name);
...
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException这个异常没试过,它的间接父类java.sql.SQLException,我试了一下是可以捕获的。