通常在开发过程中,会遇到很多异常,对于一些知道异常的原因,这时候想要返回给浏览器,就需要自定义系统的异常
1、Spring 注入异常处理类
<bean id ="commonExceptionHandler" class = "com..test.common.exception.handler.CommonExceptionHandler">
2、注入的异常处理类,主要是重写resolveException方法
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import com.test.common.constant.ERRORConstants;
import com.test.common.constant.GlobalConstants;
import com.test.common.dto.ResultDTO;
import com.test.common.exception.ServiceException;
import com.test.common.exception.SysException;
import com.test.common.util.SpringContextHolder;
import com.test.common.util.StringUtil;
public class CommonExceptionHandler implements HandlerExceptionResolver {
private static final Logger LOG = LoggerFactory.getLogger(CommonExceptionHandler.class);
/**
* @param request 参数
* @param response 参数
* @param obj 参数
* @param e 参数
* @return modelview
*/
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object obj,
Exception e) {
ResultDTO result;
if (e instanceof SysException) {
result = handleSysException((SysException) e);
} else if (e instanceof ServiceException) {
result = handleServiceException((ServiceException) e);
} else {
result = handleSysException(new SysException(ERRORConstants.COMMON_SYSTEM_ERROR, e));
}
responseOutWithJson(response, result);
return new ModelAndView();
}
private ResultDTO handleSysException(SysException ex) {
ResultDTO result = new ResultDTO();
result.setCode(ex.getCode());
if(StringUtil.isNotEmpty(ex.getMsg())){
result.setMessage(ex.getMsg());//这里获取的是自己设置的信息
}else {
result.setMessage(SpringContextHolder.getMessage(ex.getCode(), null));
}
LOG.error(new StringBuilder().append(result.getCode()).append(result.getMessage()).toString(), ex);
return result;
}
private ResultDTO handleServiceException(ServiceException ex) {
ResultDTO result = new ResultDTO();
result.setCode(ex.getCode());
result.setMessage(SpringContextHolder.getMessage(ex.getCode(), null));
LOG.error(new StringBuilder().append(result.getCode()).append(result.getMessage()).toString());
return result;
}
protected void responseOutWithJson(HttpServletResponse response, Object responseObject) {
JSONObject responseJSONObject = JSONObject.fromObject(responseObject);
String jsonString = responseJSONObject.toString();
response.setCharacterEncoding(GlobalConstants.DEFAULT_ENCODING);
response.setContentType("application/json; charset=utf-8");
PrintWriter out = null;
try {
out = response.getWriter();
out.append(jsonString);
LOG.debug("返回是\n");
LOG.debug(jsonString);
} catch (IOException e) {
LOG.debug("Error responseOutWithJson");
} finally {
if (out != null) {
out.close();
}
}
}
}
3、自定义系统异常类
package com.test.common.exception.base; public class BaseCommonException extends RuntimeException { private static final long serialVersionUID = 1L; private String code; private String msg;//用于存放异常信息 /** * 构造函数 */ public BaseCommonException() { super(); } /** * * @param cause 参数 */ public BaseCommonException(Throwable cause) { super(cause); } /** * * @param code 参数 */ public BaseCommonException(String code) { this.setCode(code); } /** * * @param code 参数 * @param e 参数 */ public BaseCommonException(String code, Throwable e) { super(e); this.setCode(code); } /** * * @param code 参数 * @param e 参数 */ public BaseCommonException(String code, Throwable e,String msg) { super(e); this.setCode(code); this.setMsg(msg); } /** * * @return code */ public String getCode() { return code; } /** * * @param code 参数 */ public void setCode(String code) { this.code = code; } /** * * @return msg */ public String getMsg() { return msg; } /** * * @param msg 参数 */ public void setMsg(String msg) { this.msg = msg; } }
4、Service类
public boolean test() { String msg = ""; try { msg = "自定义信息"; return true; } catch (Exception e) { throw new BaseCommonException("300",e, "失败信息:"+msg); } }