前言:
对于ssm项目通常会把事务配置在service层,这样service层就必须将运行时异常抛到controller进行try-catch进行处理,将异常信息返回前台及记录日志(如下代码),带来的直接后果就是代码可读性差,而且必须根据service层返回的不同异常进行不同处理。
@RequestMapping(value = "updateConsultant", method = RequestMethod.POST)
public Object updateConsultant(HttpServletRequest request) {
try {
Map<String, String> data = RequestUtil.getQueryParams(request);
studyService.update("updateConsultant", data);
return ResponseData.success();
} catch (Exception e) {
logger.error(e.getMessage(), e);
return JSON.toJSONString(ResponseData.failure(e.getMessage()));
}
}
使用 @ControllerAdvice + @ExceptionHandler 进行全局的 Controller 层异常处理,只要设计得当,就再也不用在 Controller 层进行 try-catch 了。
基本使用用例:
使用时必须确保 BaseExceptionHandler 类被加载进了spring容器<context:component-scan base-package=“com.zkcb.**.controller” />,类要写到对应的controller里面,可以声明各种不同的异常。
@ControllerAdvice
public class BaseExceptionHandler {
@ExceptionHandler(Exception.class)
@ResponseBody
public ResultData error(Exception e){
e.printStackTrace();
System.out.println("调用了异常处理");
// logger.error(e.getMessage(), e);
return new ResultData(1,e.getMessage());
}
}