SpringMVC 異常統一處理接口 HandlerExceptionResolver

1.源碼接口 

/**
 * 源碼接口定義
 */
public interface HandlerExceptionResolver {
 
	ModelAndView resolveException(
			HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);

}

 

2.源碼接口實現

@Component
public class ExceptionHandler implements HandlerExceptionResolver {

	@Override
	public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {

		// 判斷是否AJAX請求
		if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
			try {
				response.setContentType("application/json;charset=UTF-8");
				PrintWriter writer = response.getWriter();
				Map<String, Object> map = new HashMap<String, Object>();
				map.put("success", false);
				if (ex instanceof MessageException) {// 安全起見,業務異常前端可見,不然統一歸爲系統異常
					map.put("errorMsg", ex.getMessage());
				} else {
					map.put("errorMsg", "系統異常!");
				}
				Gson gson = new Gson();
				writer.write(gson.toJson(map));
				writer.flush();
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		Map<String, Object> model = new HashMap<>();
		return new ModelAndView("/error", model); 
	} 
}

ExceptionHandler 實現 HandlerExceptionResolver接口,須要添加 @Component 註解,或者增長配置文件 <bean class="com.xxg.ExceptionHandler " /> 。 前端

配置完成,後臺Controller中全部的業務異常都會由ExceptionHandler來處理。java

相關文章
相關標籤/搜索