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为形参的情况,因此需要单独写出一个参数的构造器。

浙公网安备 33010602011771号