1,首先返回给前端的消息有提示操作正确的消息,也有提示操作错误的消息。而这样的消息都应该以一种统一的格式返回给前端,前端根据返回的消息中的消息码判断操作成功或者失败.所以新建ResponseMessage封装这种数据格式.用来lombok省去自己写get,set方法.
import lombok.Data;
/**
- 描述:
- HttpRequest请求返回的最外层对象,用一种统一的格式返回给前端
- @author HobbyBear
- @create 2018-03-17 15:26
*/
@Data
public class ResponseMessage<T> {
//错误码
private int code;
//信息描述
private String msg;
//具体的信息内容
private T data;
}
2,消息码的定义应该封装到一个统一的地方,这里新建一个枚举ResultEnum,这样所有
操作的消息码和消息描述就放在了一个地方。
public enum ResultEnum {
UNKNOWN_ERROR(-100, "未知错误"),
NEED_LOGIN(-1, "未登录"),
REPEAT_REGISTER(-2, "该用户已注册"),
USER_NOT_EXIST(-3, "不存在该用户"),
PASSWORD_ERROR(-4, "密码错误"),
EMPTY_USERNAME(-5, "用户名为空"),
EMPTY_PASSWORD(-6, "密码为空"),
SUCCESS(0, "success"),
SYSTEM_ERROR(-1000001,"系统错误");
private Integer code;
private String msg;
private ResultEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
3,对于操作的结果返回不同的responseMessage,用了一个ResultUtil工具类解决。
/**
- 描述:
对返回给前端的信息进行处理,对ResponseMessage进行处理的工具类
- @author HobbyBear
- @create 2018-03-17 15:33
*/
public class ResultUtil {
public static ResponseMessage success(Object object) {
ResponseMessage responseMessage = new ResponseMessage();
responseMessage.setCode(ResultEnum.SUCCESS.getCode());
responseMessage.setMsg(ResultEnum.SUCCESS.getMsg());
responseMessage.setData(object);
return responseMessage;
}
/**
* 操作成功不返回消息
* @return
*/
public static ResponseMessage success() {
return success(null);
}
/**
* 操作失败返回的消息
* @param code
* @param msg
* @return
*/
public static ResponseMessage error(int code,String msg) {
ResponseMessage responseMessage = new ResponseMessage();
responseMessage.setCode(code);
responseMessage.setMsg(msg);
return responseMessage;
}
/**
* 操作失败返回消息,对error的重载
* @param resultEnum
* @return
*/
public static ResponseMessage error(ResultEnum resultEnum){
ResponseMessage responseMessage = new ResponseMessage();
responseMessage.setCode(resultEnum.getCode());
responseMessage.setMsg(resultEnum.getMsg());
return responseMessage;
}
}
4,自定义的异常类
public class MyException extends RuntimeException {
private int code;
private String errMsg;
public MyException(ResultEnum resultEnum){
this.code = resultEnum.getCode();
this.errMsg = resultEnum.getMsg();
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
5,接下来就是对异常的处理,所有异常用一个@ControllerAdvice的类进行处理。
/**
-
描述:
统一对异常进行处理的类
-
@author HobbyBear
-
@create 2018-03-17 16:36
*/
@ControllerAdvice
public class ExceptionHandler {
private final static Logger logger= LoggerFactory.getLogger(ExceptionHandler.class);@org.springframework.web.bind.annotation.ExceptionHandler(value = Exception.class) public ResponseMessage handel(Exception e){ if(e instanceof MyException){ MyException myException =(MyException)e; return ResultUtil.error( myException.getCode(),myException.getMessage()); }else { logger.error("[系统异常] {}",e); return ResultUtil.error(ResultEnum.SYSTEM_ERROR); } }
}
网友评论