JSON返回封装类 package com.yingjun.ssm.dto;import com.fasterxml.jackson.annotation.JsonInclude;import java.io.Serializable;/** * * * ajax 请求的返回类型封装JSON结果 */public class BaseResult implements Serializable {private
package com.yingjun.ssm.dto; import com.fasterxml.jackson.annotation.JsonInclude; import java.io.Serializable; /** * * * ajax 请求的返回类型封装JSON结果 */ public class BaseResult异常枚举基类implements Serializable { private static final long serialVersionUID = -4185151304730685014L; private boolean success; private T data; private String error; public BaseResult(boolean success, String error) { this.success = success; this.error = error; } public BaseResult(boolean success, T data) { this.success = success; this.data = data; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public T getData() { return data; } public void setData(T data) { this.data = data; } public String getError() { return error; } public void setError(String error) { this.error = error; } @Override public String toString() { return "BaseResult [success=" + success + ", data=" + data + ", error=" + error + "]"; } }
package com.yingjun.ssm.enums; /** * 业务异常基类,所有业务异常都必须继承于此异常 定义异常时,需要先确定异常所属模块。 例如:无效用户可以定义为 [10010001] * 前四位数为系统模块编号,后4位为错误代码 ,唯一。 * */ public enum ResultEnum { // 数据库想操作异常 DB_INSERT_RESULT_ERROR(99990001, "db insert error"), DB_UPDATE_RESULT_ERROR(99990002, "db update error"), DB_SELECTONE_IS_NULL(99990003,"db select return null"), // 系统异常 INNER_ERROR(99980001, "系统错误"), TOKEN_IS_ILLICIT(99980002, "Token验证非法"), SESSION_IS_OUT_TIME(99980003, "会话超时"), // 用户相关异常 INVALID_USER(1001001, "无效用户"); private int state; private String msg; ResultEnum(int state, String msg) { this.state = state; this.msg = msg; } public int getState() { return state; } public String getMsg() { return msg; } public static ResultEnum stateOf(int index) { for (ResultEnum state : values()) { if (state.getState() == index) { return state; } } return null; } }异常统一处理
package com.yingjun.ssm.exception; import com.alibaba.fastjson.JSON; import com.yingjun.ssm.dto.BaseResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; /** * 错误信息统一处理 * 对未处理的错误信息做一个统一处理 * @author yingjun * */ @Component public class GlobalExceptionResolver implements HandlerExceptionResolver { private final Logger LOG = LoggerFactory.getLogger(this.getClass()); @ResponseBody public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { LOG.error("访问" + request.getRequestURI() + " 发生错误, 错误信息:" + ex.getMessage()); //这里有2种选择 //跳转到定制化的错误页面 /*ModelAndView error = new ModelAndView("error"); error.addObject("exMsg", ex.getMessage()); error.addObject("exType", ex.getClass().getSimpleName().replace("\"", "'"));*/ //返回json格式的错误信息 try { PrintWriter writer = response.getWriter(); BaseResult自定义异常result=new BaseResult(false, ex.getMessage()); writer.write(JSON.toJSONString(result)); writer.flush(); } catch (Exception e) { LOG.error("Exception:",e); } return null; } }
/** * 自定义异常 */ public class BizException extends RuntimeException { private static final long serialVersionUID = 1L; public BizException(String message) { super(message); } public BizException(String message, Throwable cause) { super(message, cause); } }