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