我们在项目中的处理,可以定义一个ExceptionResolver,然后在这个里面将e.getMessage信息拿出来就可以了,这个里面可以判断是ajax请求还是普通的请求,可以返回到不同的地方,欢迎讨论。public class MappingExceptionResolver extends SimpleMappingExceptionResolver {
private String getErrorMsg(Exception e){
String errorMsg = "";
Throwable cause = e.getCause();
if(cause != null && StringUtils.isNotBlank(cause.getMessage())){
errorMsg = e.getCause().getMessage();
} else if(StringUtils.isNotBlank(e.getMessage())){
errorMsg = e.getMessage();
}
return errorMsg;
}
@Override
protected ModelAndView doResolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
String accept = request.getHeader("accept");
if(accept.indexOf("application/json")>-1){
Map errors = new HashMap();
errors.put("errorCode", "-1");
errors.put("errorMsg", getErrorMsg(ex));
request.setAttribute("errorJson", JSONObject.fromObject(errors).toString());
return super.getModelAndView("errors/ajax/500", ex, request);
}
if (ex instanceof TnAccessDeniedException) {
response.setStatus(HttpStatus.SC_FORBIDDEN);
}
return super.doResolveException(request, response, handler, ex);
}
protected ModelAndView getModelAndView(String viewName, Exception ex) {
if(ex instanceof TnBaseException){
LoggerHelper.err(MappingExceptionResolver.class,ex.getMessage());
}else{
LoggerHelper.err(MappingExceptionResolver.class,"", ex);
}
return super.getModelAndView(viewName, ex);
}
}
2012年7月20日 18:57