现在我们一般都会返回json数据到前端,json输出的时候一般都会与客户端做一个接口上的约定,比如下图
所以我们可以根据上图做一个输出结果的封装
package com.yy.miaosha.result;
public class Result<T> {
private int code;
private String msg;
private T data;
/**
* 构造函数
*/
private Result(T data) {
this.data = data;
}
private Result(int code, String msg) {
this.code = code;
this.msg = msg;
}
private Result(CodeMsg codeMsg) {
if(codeMsg != null) {
this.code = codeMsg.getCode();
this.msg = codeMsg.getMsg();
}
}
/**
* 成功时候的调用
* */
public static <T> Result<T> success(T data){
return new Result<T>(data);
}
/**
* 失败时候的调用
* */
public static <T> Result<T> error(CodeMsg codeMsg){
return new Result<T>(codeMsg);
}
//这里省略了getter和setter方法
}
可以看到,当我们失败时的error方法需要传入一个CodeMsg(里面包含了code和msg的属性),因此,我们再建立一个CodeMsg的类
package com.yy.miaosha.result;
public class CodeMsg {
private int code;
private String msg;
//构造函数
private CodeMsg( ) {
}
private CodeMsg( int code,String msg ) {
this.code = code;
this.msg = msg;
}
//通用的错误码
public static CodeMsg SUCCESS = new CodeMsg(0, "success");
public static CodeMsg SERVER_ERROR = new CodeMsg(500100, "服务端异常");
public static CodeMsg BIND_ERROR = new CodeMsg(500101, "参数校验异常:%s");
public static CodeMsg REQUEST_ILLEGAL = new CodeMsg(500102, "请求非法");
public static CodeMsg ACCESS_LIMIT_REACHED= new CodeMsg(500104, "访问太频繁!");
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
这里要注意,在自己类中只能定义static的类实例,不然会导致循环迭代。
这样我们就封装好了返回数据了。
最后我们通过在controller中测试下就可以啦