1,一直纠结spring mvc 捕获全部异常后返回类型的问题,因为项目里面包含jsp返回和json两种返回结果需要统一处理,网上找了些资料记下笔记。
springmvc.xml 配置<bean id="handlerExceptionResolver" class="com.xx.xx.xx.MyExceptionHandler"/>
public class MyExceptionHandler implements HandlerExceptionResolver {
public final static Logger log = Logger.getLogger(MyExceptionHandler.class);
/**
* 全局项目异常处理
*/
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// TODO Auto-generated method stub
ex.printStackTrace();
//上传文件大于限制大小抛出异常
if (ex instanceof MaxUploadSizeExceededException) {
MaxUploadSizeException(response, ex);
}
ModelAndView view = new ModelAndView();
// 获取发生异常方法的返回值context包含public+返回值+类名+方法名(参数)
String[] context = handler.toString().split(" ");
String type = null;
if (context.length > 0) {
type = context[1];
}
//返回jsp界面异常处理
if (type.contains("String")) {
return stringException(ex);
} else {
//ajax异常处理
otherException(response, ex);
}
return view;
}
/**
* 上传文件过大异常
*
* @param response
* @param ex
*/
private void MaxUploadSizeException(HttpServletResponse response,
Exception ex) {
try {
response.getWriter().write(
"{\"success\":false,\"message\":\"上传文件不能大于"
+ ((MaxUploadSizeExceededException) ex)
.getMaxUploadSize() / 1000 / 1000 + "\"}");
log.info(ex.getMessage());
} catch (IOException e) {
e.printStackTrace();
log.info(e.getMessage());
}
}
/**
* 返回jsp界面异常
*
* @return
*/
private ModelAndView stringException(Exception ex) {
ModelAndView view1 = new ModelAndView("system/500");
log.info(ex.getMessage());
return view1;
}
/**
* 其他异常(多为ajax异常)
*
* @param response
*/
private void otherException(HttpServletResponse response, Exception ex) {
try {
response.getWriter().write(
"{\"success\":false,\"message\":\""+xx.ALL_EXCEPTION+"\"}");
log.info(ex.getMessage());
} catch (IOException e) {
e.printStackTrace();
log.info(e.getMessage());
}
}
}
resolveException 方法里面Object handler能看到返回类型取想要获取没找到办法,最后只能toString算是勉强达到要求