笨鸟先飞
自己搭建了一个项目,用来学习使用的,其中跟随前辈学习,将项目中的所以异常进行了统一处理,这里小计一下。
自定义异常类 OutPutMessageException
首先定义一个异常类作为返回对象。
现在处于流行的前后端开发分离,所以后端人员习惯把返回的对象加上统一标识返回给前端以便前端人员判断是否成功。
(此类需要继承 RuntimeException )
package net.zcy.mem.common.exception; import net.zcy.mem.common.utils.MessageCode; /** * @Author Tail Fish * @Date 2017年12月8日 下午2:23:22 * @Description 自定义异常类 **/ public class OutPutMessageException extends RuntimeException{ private static final long serialVersionUID = -4962155715318726196L; private MessageCode resultCode = MessageCode.FAIL; private String msg; public OutPutMessageException(String message, Throwable e) { super(message, e); this.msg = message; } public OutPutMessageException(String message) { super(message); this.msg = message; } public MessageCode getResultCode() { return resultCode; } public void setResultCode(MessageCode resultCode) { this.resultCode = resultCode; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
异常捕获 OutPutMessageHandle
package net.zcy.mem.common.exception; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import net.zcy.mem.common.utils.MessageError; import net.zcy.mem.common.utils.OutPutMessage; /** * @Author Tail Fish * @Date 2017年12月8日 下午2:18:50 * @Description 异常捕获 **/ @ControllerAdvice public class OutPutMessageHandle { private Logger LOG = LoggerFactory.getLogger(OutPutMessageHandle.class); @SuppressWarnings("rawtypes") @ExceptionHandler(value = OutPutMessageException.class) @ResponseBody public OutPutMessage handleOutPutMessageException(OutPutMessageException e){ LOG.error(e.getMessage()); return OutPutMessage.error(e.getMessage()); } @SuppressWarnings("rawtypes") @ExceptionHandler(Exception.class) @ResponseBody public OutPutMessage handleException(Exception e){ LOG.error(e.getMessage(),e); return OutPutMessage.error(MessageError.ERROR_SYSTEM.getMsg()); } }
@ControllerAdvice 想认识该注解的可以戳 --> Spring3.2新注解@ControllerAdvice
@ExceptionHandler 注解需要标注 我们对哪个异常的处理,这里我写了捕获我们的自定义异常和Exception.
返回对象 OutPutMessage
package net.zcy.mem.common.utils; import java.io.Serializable; /** * @param <T> 对象内容 * @Author Tail Fish * @Date 2017年12月8日 下午1:51:06 * @Description 服务响应信息 **/ public class OutPutMessage<T> implements Serializable{ private static final long serialVersionUID = -112405946146184090L; /**响应标识**/ private MessageCode resultCode = MessageCode.SUCCESS; /**响应具体信息**/ private String resultMsg; /**请求响应数据**/ private T data; public MessageCode getResultCode() { return resultCode; } public void setResultCode(MessageCode resultCode) { this.resultCode = resultCode; } public String getResultMsg() { return resultMsg; } public void setResultMsg(String resultMsg) { this.resultMsg = resultMsg; } public T getData() { return data; } public void setData(T data) { this.data = data; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static OutPutMessage success(Object o){ OutPutMessage outPutMessage = new OutPutMessage(); outPutMessage.setData(o); return outPutMessage; } @SuppressWarnings("rawtypes") public static OutPutMessage error(String msg){ OutPutMessage outPutMessage = new OutPutMessage(); outPutMessage.setResultCode(MessageCode.FAIL); outPutMessage.setResultMsg(msg); return outPutMessage; } }
该对象是返回给前端人员最终看到的数据,包含成功/失败标识,失败原因,以及成功之后返回的对象Data.