spring mvc 全局异常处理

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算是勉强达到要求


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值