package org.xujin.janus.admin.exception;
import java.io.IOException;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.shiro.authz.UnauthenticatedException;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.xujin.janus.admin.base.ResultData;
import org.xujin.janus.admin.constant.Config;
import org.xujin.janus.admin.utils.FastjsonFilterUtil;
import org.xujin.janus.admin.utils.ResourcesUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
* @author xujin
* @Description: 全局异常处理器
*/
public class ApplicationExceptionResolver implements HandlerExceptionResolver {
* Log类
*/
private Logger logger = Logger.getLogger(getClass());
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
logger.info("异常拦截器执行开始。");
String msgContent = ResourcesUtil.getValue(Config.MESSAGE, ex.getMessage());
logger.error("发生异常:" + msgContent, ex);
this.writeJsonByFilter(response, this.resolveExceptionCustom(ex), null, null);
logger.info("异常拦截器执行结束。");
return new ModelAndView();
}
* 异常信息解析方法
*
* @param ex
*/
private ResultData resolveExceptionCustom(Exception ex) {
ResultData model = new ResultData();
if (ex instanceof ApplicationException) {
model.setMsgCode(this.getMsgCode(ex));
}
else if (ex instanceof UnauthenticatedException) {
model.setMsgCode("ECOMMON00002");
}
else {
model.setMsgCode("ECOMMON00001");
}
return model;
}
private String getMsgCode(Exception ex) {
String msgCode = ex.getMessage();
if (msgCode.charAt(0) != 'E' && msgCode.charAt(0) != 'W'
&& msgCode.charAt(0) != 'I') {
msgCode = ex.getCause().getMessage();
}
return msgCode;
}
* 将对象转换成JSON字符串,并响应回前台
*/
protected void writeJsonByFilter(HttpServletResponse response, Object object,
String[] includesProperties, String[] excludesProperties) {
try {
FastjsonFilterUtil filter = new FastjsonFilterUtil();
if (excludesProperties != null && excludesProperties.length > 0) {
filter.getExcludes().addAll(Arrays.<String> asList(excludesProperties));
}
if (includesProperties != null && includesProperties.length > 0) {
filter.getIncludes().addAll(Arrays.<String> asList(includesProperties));
}
String json = JSON.toJSONString(object, filter,
SerializerFeature.WriteDateUseDateFormat,
SerializerFeature.DisableCircularReferenceDetect);
logger.info("JSON String is:" + json);
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(json);
response.getWriter().flush();
response.getWriter().close();
}
catch (IOException e) {
logger.error("An error occurred when object was converted to JSON", e);
}
}
}