controller层的返回值:ret类

为了规范编程,我们一般用一个专门的来表示返回的值,其中发生错误就返回错误码,操作成功就返回操作的对象

那么我们首先需要一个错误码类:Code

@Data
@AllArgsConstructor
public class Code {
    private String code;
    private String errMsg;

    public Code(String code) { //成功时候的构造器
        this.code = code;
    }
    
}

很简单的一个类,里面主要有错误码和错误信息两个属性。我们知道,一般错误都是有固定的类型的,所以根据调用的方法不同,我们可以写很多方法错误码的接口

  比如 InfoResult表示列的返回结果(输入为空或者不存在),LoginResult表示登陆时的各种状态,Result表示各种情况都会出现的状态(比如成功)等等。

public interface InfoResult {
    Code INFO_EMPTY = new Code("911_400","输入的info为空");
    Code INFO_NOT_EXIST = new Code("911_400","info在表中不存在");
    //Code SAVE_FAIL = new Code("905_500","保存失败,请稍后重试");
}

 

public interface LoginResult {
    Code WRONG_USERNAME = new Code("911_401","无效用户名");
    Code WRONG_PASSWORD = new Code("911_401","密码错误,请重新输入!");
}
public interface ModifyAndAddResult {
    Code DUPLICATE_USERNAME = new Code("911_402","用户名重复");
    Code SHORT_PASSWORD = new Code("911_402","密码没有超过六位");
    Code HAS_CHINESE = new Code("911_402","用户名存在中文符号");
}
public interface Result {
    Code SUCCESS = new Code("0"); //操作成功
}

 

 

当写完这些接口之后,我们就可以写Ret类了:

@Data //必须加getter方法!因为json序列化需要用getter方法提取数据
@AllArgsConstructor
@NoArgsConstructor
public class Ret { //可以不实现 Serializable
    private Code code;
    private Info data;

    public static Ret success(Info info){
        return new Ret(info); //成功返回操作对象
    }

    public static Ret error(Code error){
        return new Ret(error); //失败返回Code
    }

    public Ret(Code code) {
        this.code = code;
    }

    public Ret(Info data) {
        this.data = data;
    }
}

 

我们可以发现,返回Ret的方法都是静态方法,这是因为可以直接用类名进行调用,可读性高,还不用生成对象。

需要注意一个点:Ret类必须添加 @Data 注解来生成 getter and setter方法,因为controller层把Ret类作为了返回值,也就意味着Ret类会显示在显示器上,这需要进行json序列化。只要在Maven中添加了

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>

 

就可以自动进行json序列化,但前提是需要有getter方法,不然json无法序列化(因为根本无法提取数据)。因此使用了@Data注解。

然后注意一点,构造Ret类不能出现null为形参的情况,因此需要单独写出一个参数的构造器。

 

posted @ 2021-11-25 20:48  Acc22222222  阅读(281)  评论(0)    收藏  举报