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

 

相关文章