说明:仅且返回状态为0时说明正确返回,其余都是异常或错误返回
1、封装返回数据状态,数据,信息Result .java
@ApiModel(description = "接口返回响应数据")
public class Result extends HashMap<String,Object> implements java.io.Serializable {
public Result setSuccess(Object data) {
return this.setSuccess("操作成功", data);
}
public Result setSuccess(String msg) {
return this.setSuccess(msg, null);
}
public Result setSuccess(String msg, Object data) {
this.put("msg", msg);
this.put("data", data);
this.put("status", BaseResponseCode.SUCCESS.getStatus());
return this;
}
public Result setError(String msg) {
return this.setError(msg, BaseResponseCode.ERROR.getStatus());
}
public Result setError(Integer status) {
return this.setError("操作失败", status);
}
public Result setError(String msg, Integer status) {
this.put("msg", msg);
this.put("status", status);
return this;
}
public Result setError(ResponseCodeInterface code) {
this.put("msg", code.getMsg());
this.put("status", code.getStatus());
return this;
}
public Result setResult(String msg, Object data, Integer status) {
this.put("msg", msg);
this.put("data", data);
this.put("status", status);
return this;
}
}
常量
2、封装异常返回数据
自定义异常接口
ResponseCodeInterface.java
public interface ResponseCodeInterface {
int getCode();
String getMsg();
}
枚举类:BaseResponseCode.java
public enum BaseResponseCode implements ResponseCodeInterface {
SUCCESS(0, "操作成功"),
ERROR(1, "操作异常"),
/**
* 账户异常
*/
USER_EXIST(400001, "该用户已存在,请重新注册"),
USER_EXIST1(400001, "该邮箱存在,请重新注册"),
NOT_ACCOUNT(400002, "该用户不存在,请先注册"),
USER_LOCK(400005, "该用户已被锁定,请联系运营人员"),
ACCOUNT_ERROR(400009, "该账号异常,请联系运营人员"),
PASSWORD_ERROR(400010,"用户名或密码错误"),
OLD_PASSWORD_ERROR(400011,"旧密码不正确"),
USER_PASSWORD_ERROR(400012,"用户或密码不正确"),
/**
* 请求参数异常
*/
DATA_ERROR(400020,"传入数据异常"),
/**
* 前端操作异常
*/
OPERATION_MENU_PERMISSION_CATALOG_ERROR(401031,"操作后的类型是目录,所属菜单必须为默认顶级菜单或者目录"),
OPERATION_MENU_PERMISSION_MENU_ERROR(401032,"操作后的类型是菜单,所属菜单必须为目录类型"),
OPERATION_MENU_PERMISSION_BTN_ERROR(401033,"操作后的类型是按钮,所属菜单必须为菜单类型"),
/**
* token异常
*/
TOKEN_ERROR(401001, "登录凭证已过期,请重新登录"),
TOKEN_PAST_DUE(401002, "授权信息已过期,请刷新token"),
/**
* 权限异常
*/
UNAUTHORIZED_ERROR(403001, "权鉴校验不通过"),
/**
* 操作数据库异常
*/
REGISTER_ERROR(500001, "注册失败,请尝试重新注册"),
;
private final String msg;
private final int status;
BaseResponseCode(int status, String msg) {
this.status = status;
this.msg = msg;
}
@Override
public int getStatus() {
return status;
}
@Override
public String getMsg() {
return msg;
}
}
异常类:BusinessException.java
public class BusinessException extends RuntimeException {
/**
* 异常编号
*/
private final int messageCode;
/**
* 对messageCode 异常信息进行补充说明
*/
private final String detailMessage;
public BusinessException(int messageCode,String message) {
super(message);
this.messageCode = messageCode;
this.detailMessage = message;
}
/**
* 构造函数
* @param code 异常码
*/
public BusinessException(ResponseCodeInterface code) {
this(code.getCode(), code.getMsg());
}
public int getMessageCode() {
return messageCode;
}
public String getDetailMessage() {
return detailMessage;
}
}
3、正常返回与异常返回
controller层 LoginRegisterController.java将调用下面service层方法
public Result register(RegisterReqVO vo){
Result result= new Result();
try {
trUserService.register(vo);
result.setSuccess("注册成功");
} catch (BusinessException e) {
e.printStackTrace();
result.setError(e.getMessageCode(),e.getDetailMessage());
} catch (Exception e) {
e.printStackTrace();
result.setError("注册异常");
return result;
}
return result;
}
service层:TRUserServiceImpl.java
@Override
public String register(RegisterReqVO vo) throws Exception {
// 先检查数据库是否有在用的账号或邮箱,只要就一个就不注册
if (BeanUtil.isNotEmpty(vo.getUsername())) {
if (findByUsername(vo.getUsername())) {
throw new BusinessException(BaseResponseCode.USER_EXIST);
}
}
if (BeanUtil.isNotEmpty(vo.getEmail())) {
if (findByEmail(vo.getEmail())) {
throw new BusinessException(BaseResponseCode.USER_EXIST1);
}
}
TRUser trUser = new TRUser();
BeanUtils.copyProperties(vo, trUser);
trUser.setSalt(PasswordUtils.getSalt());
String encode = PasswordUtils.encode(vo.getPassword(), trUser.getSalt());
trUser.setPassword(encode);
trUser.setCreatDate(new Date());
save(trUser);
return trUser.getId();
}
说明:当正常返回或者走到Exception异常时返回Result,当走自定义异常BusinessException时,返回BusinessException中错误状态码与错误说明