淘先锋技术网

首页 1 2 3 4 5 6 7

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:在项目中定义统一的返回值,接收返回信息参数时更加方便。


提示:以下是本篇文章正文内容,下面案例可供参考

统一返回类

/**
 * 统一返回类,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));