您的位置:首页 > 编程语言 > Java开发

springmvc controller 统一异常处理

2017-05-25 15:04 387 查看
针对springmvc controller层面有多种统一异常处理方法,包括默认的,自定义的,以及注解配置的。这里我推荐一种自定义异常处理方式,它能够处理ajax调用的异常和普通视图调用的异常(比如jsp)。具体的代码如下:

public class GlobalHandlerExceptionResolver implements HandlerExceptionResolver {

private static final Logger logger = LoggerFactory.getLogger(GlobalHandlerExceptionResolver.class);
/**
* 没有区分是哪种情况的异常
*/
@Override
public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object o, Exception ex) {
logger.error(ex.getMessage(), ex);
HandlerMethod method = (HandlerMethod) o;
// ResponseBody.class注解说明是ajax调用,否则返回视图
if (method.getMethod().isAnnotationPresent(ResponseBody.class)) {
try {
resp.getWriter().write(ex.getMessage());
resp.getWriter().flush();
resp.getWriter().close(); //这里很重要,否则ajax的readystatus为0
} catch (Exception e) {
logger.error(e.getMessage());
}
return null;
} else {
Map<String, String> map = new HashMap<String, String>();
map.put("errorInfo", "服务器异常,异常提示:" + ex.getMessage());
return new ModelAndView("error/error", map);
}
}
}


使用说明在spring配置文件中,配置改异常处理bean,代码如下:

<!-- 控制器异常处理 -->
<bean id="exceptionResolver" class="com.***.exceptionhandler.GlobalHandlerExceptionResolver" />


ajax调用处理,异常信息在error中处理,通过response.responseText将异常信息进行提示。

$.ajax({
type: "POST",
url: serverContext + "/checkLogin",
dataType : "json",
data: {
"teamName" : $("#teamName").val(),
"password" : hex_md5($("#password").val()),
},
success: function(response){
var errorInfo = response.errorInfo;
if (errorInfo != "ok"){
$("#warn").text(errorInfo).show();
return;
}else{
window.location.href = serverContext + "/index";
}
},
error: function(response){
$("#warn").text("服务器异常,异常信息:" + response.responseText).show();
return;
}
})


普通的视图处理,即返回了一个error/error.jsp页面,里面可以使用errorInfo变量进行错误提示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: