提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:在项目中定义统一的返回值,接收返回信息参数时更加方便。
提示:以下是本篇文章正文内容,下面案例可供参考
统一返回类
/**
* 统一返回类,code自定义,返回时,可传入msg 或者data
* 可根据需要传入data 或者msg
* @param <T>
*/
@Data
public class SystemResult<T>{
private int code;
private String msg;
private T data;
//code msg的构造方法
private SystemResult(int code, String msg) {
this.code = code;
this.msg = msg;
}
//code msg以及回传数据的构造方法,加上泛型,减少类型转换
private SystemResult(int code, String msg, T data) {
this(code,msg);
this.data=data;
}
//使用枚举参数的构造方法,方便使用定义好的枚举
private SystemResult(SystemEnum systemEnum){
this(systemEnum.getCode(),systemEnum.getMsg());
}
public static SystemResult fail(String msg){
return new SystemResult(SystemConstant.SYSTEM_ERROR,msg);
}
public static SystemResult fail(){
return new SystemResult(SystemEnum.REQUEST_FAIL);
}
public static SystemResult fail(SystemEnum systemEnum){
return new SystemResult(systemEnum);
}
public static SystemResult fail(int code,String msg){
return new SystemResult(code,msg);
}
public static SystemResult success(){
return new SystemResult(SystemEnum.REQUEST_SUCCESS);
}
public static SystemResult success(String msg){
return new SystemResult(SystemConstant.SYSTEM_SUCCESS, msg);
}
public static <T>SystemResult success(T data){
SystemResult systemResult = success();
systemResult.setData(data);
return systemResult;
}
public static SystemResult success(SystemEnum systemEnum){
return new SystemResult(systemEnum);
}
@JsonIgnore
public boolean isSuccess(){
return this.code == SystemConstant.SYSTEM_SUCCESS;
}
}
常量值
在多处会使用到的值定义为常量值,使用接口 因为 接口中的值默认为static final
public interface SystemConstant {
int LOGIN_FAIL=700; //登录失败
int NO_LOGIN=705; //未登录
int SYSTEM_ERROR=702; //返回错误
int SYSTEM_SUCCESS=200; //返回成功
int NO_PERMISSION=706; //无权限
int WEIXIN_NOBIND=708;
int PARAM_ERROR=701;//参数异常
String COOKIE_LOGIN_KEY="COOKIE_LOGIN_KEY";
String SESSION_LOGIN_KEY="SESSION_LOGIN_KEY";
String REDIS_LOGIN_PREFIX="LOGIN_";
//redies存入的数据过期时间常数15mins
int LOGIN_KEY_EXPIRE=60*15;
int REPEAT_LOGIN=707;
String USERID="USERID";
String PROJECT_PREFIX="PROJECT_";
/**
* m某些类可以单独列出 以方便区分,查找
*/
interface User{
String SESSION_LOGIN_KEY="SESSION_LOGIN_KEY";
}
}
返回值的枚举类
将code 和msg关联起来,方便使用
@Getter
public enum SystemEnum {
LOGIN_FAIL(SystemConstant.LOGIN_FAIL,"用户名或密码错误"),
NO_LOGIN(SystemConstant.NO_LOGIN,"请先登录"),
LOGIN_EXPIRE(SystemConstant.NO_LOGIN,"登录超时请重新登录"),
WEIXIN_NOBIND(SystemConstant.WEIXIN_NOBIND,"当前微信未绑定账号"),
USERNAME_REPEAT(SystemConstant.SYSTEM_ERROR,"用户名已经存在"),
REQUEST_FAIL(SystemConstant.SYSTEM_ERROR,"请求失败"),
REQUEST_SUCCESS(SystemConstant.SYSTEM_SUCCESS,"请求成功"),
NO_PERMISSION(SystemConstant.NO_PERMISSION,"没有操作权限,请联系管理员"),
PARAM_ERROR(SystemConstant.PARAM_ERROR,"参数校验失败"),
NO_DATA_FOR_ID(SystemConstant.SYSTEM_ERROR,"当前id没有对应的数据"),
PARAM_EMPTY_ERROR(SystemConstant.SYSTEM_ERROR,"请求参数不能为空"),
REPEAT_LOGIN(SystemConstant.REPEAT_LOGIN,"您的账号重复登录"),
CHECKED(SystemConstant.SYSTEM_ERROR,"该项目已经被处理"),
JWT_EXPIRE(SystemConstant.SYSTEM_ERROR,"凭证过期")
;
private int code;
private String msg;
SystemEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
}
使用方法
//方法返回值选择统一返回值
@PostMapping("register")
public SystemResult register(@Validated UserParam userParam) {
return userService.register(userParam);
}
//返回msg信息
return SystemResult.success("注册成功,请在15分钟内登录邮箱激活账号");
//返回 Vo 或其他的data,此时msg默认为请求成功
return SystemResult.success(UserVo.generate(user));