美文网首页java 设计
springBoot的返回code数据的处理以及统一异常处理

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

作者: 蓝胖子的编程梦 | 来源:发表于2018-03-18 00:39 被阅读0次

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

}

相关文章

网友评论

    本文标题:springBoot的返回code数据的处理以及统一异常处理

    本文链接:https://www.haomeiwen.com/subject/oaddqftx.html