您的位置:首页 > 编程语言 > Java开发

springBoot的返回code数据的处理以及统一异常处理

2018-03-19 16:53 916 查看
1,首先返回给前端的消息有提示操作正确的消息,也有提示操作错误的消息。而这样的消息都应该以一种统一的格式返回给前端,前端根据返回的消息中的消息码判断操作成功或者失败.所以新建ResponseMessage封装这种数据格式.用来lombok省去自己写get,set方法.

/**

描述:
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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pringBoot exception