Java自定义异常信息

  通常在开发过程中,会遇到很多异常,对于一些知道异常的原因,这时候想要返回给浏览器,就需要自定义系统的异常

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);
        }
    }    

猜你喜欢

转载自www.cnblogs.com/zwdx/p/8963311.html