1. 前言
在Restful风格中,返回json数据,肯定要一个可以统一返回json的一个类
这样前端接收时,也可以恰好的判断错误或其他东西!
这里是网上找到的一个现成的代码,共有三个类
一:返回的类的类型:AppResult
二:上诉类型的构造器:AppResultBuilder
三:返回的各类状态码枚举:ResultCode
2. 具体代码(Java)
2.1. AppResult
package com.misiai.work_blog.util.res;
public class AppResult<T> {
private int code;
private String msg;
private T data;// 数据
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;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
2.2. AppResultBuilder
package com.misiai.work_blog.util.res;
public class AppResultBuilder {
//成功,不返回具体数据
public static <T> AppResult<T> successNoData(ResultCode code) {
AppResult<T> result = new AppResult<T>();
result.setCode(code.getCode());
result.setMsg(code.getMsg());
return result;
}
//成功,返回数据
public static <T> AppResult<T> success(T t, ResultCode code) {
AppResult<T> result = new AppResult<T>();
result.setCode(code.getCode());
result.setMsg(code.getMsg());
result.setData(t);
return result;
}
//失败,返回失败信息
public static <T> AppResult<T> fail(ResultCode code) {
AppResult<T> result = new AppResult<T>();
result.setCode(code.getCode());
result.setMsg(code.getMsg());
return result;
}
}
2.3. ResultCode
public enum ResultCode {
/* 成功状态码 */
SUCCESS(1000, "成功"),
/* 参数错误:10001-19999 */
PARAM_IS_INVALID(10001, "参数无效"),
PARAM_IS_BLANK(10002, "参数为空"),
PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
PARAM_NOT_COMPLETE(10004, "参数缺失"),
/* 用户错误:20001-29999*/
USER_NOT_LOGGED_IN(20001, "用户未登录"),
USER_LOGIN_ERROR(20002, "账号不存在或密码错误"),
USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"),
USER_NOT_EXIST(20004, "用户不存在"),
USER_HAS_EXISTED(20005, "用户已存在"),
USER_PASSWORD_ERROR(20006, "用户密码错误"),
USER_PASSWORD_MODIFY_SUCCESS(20007, "修改密码成功"),
USER_PASSWORD_MODIFY_FAIL(20008, "修改密码失败"),
USER_LOGIN_SUCCESS(20009, "登录成功"),
USER_LOGIN_FAIL(20010, "登录失败"),
USER_REGISTER_SUCCESS(20011, "注册成功"),
USER_REGISTER_FAIL(20012, "注册失败"),
/* 权限错误:70001-79999 */
PERMISSION_NO_ACCESS(70001, "无访问权限");
private Integer code;
private String msg;
ResultCode(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
3. 具体代码(Kotlin)
3.1. AppResult
class AppResult<T> {
var code = 0
var msg: String? = null
var data // 数据
: T? = null
private set
fun setData(data: T) {
this.data = data
}
}
3.2. AppResultBuilder
object AppResultBuilder {
//成功,不返回具体数据
fun <T> successNoData(code: ResultCode): AppResult<T> {
val result = AppResult<T>()
result.code = code.code
result.msg = code.msg
return result
}
//成功,返回数据
fun <T> success(t: T, code: ResultCode): AppResult<T> {
val result = AppResult<T>()
result.code = code.code
result.msg = code.msg
result.setData(t)
return result
}
//失败,返回失败信息
fun <T> fail(code: ResultCode): AppResult<T> {
val result = AppResult<T>()
result.code = code.code
result.msg = code.msg
return result
}
//错误,返回错误信息
fun <T> error(code: Int, msg: String): AppResult<T> {
val result = AppResult<T>()
result.code = code
result.msg = msg
return result
}
}
3.3. ResultCode
//状态码
public enum ResultCode {
/* 成功状态码 */
SUCCESS(0, "成功"),
/* 参数错误:10001-19999 */
PARAM_IS_INVALID(10001, "参数无效"),
PARAM_IS_BLANK(10002, "参数为空"),
PARAM_TYPE_BIND_ERROR(10003, "参数类型错误"),
PARAM_NOT_COMPLETE(10004, "参数缺失"),
/* 用户错误:20001-29999*/
USER_NOT_LOGGED_IN(20001, "用户未登录"),
USER_LOGIN_ERROR(20002, "账号不存在或密码错误"),
USER_ACCOUNT_FORBIDDEN(20003, "账号已被禁用"),
USER_NOT_EXIST(20004, "用户不存在"),
USER_HAS_EXISTED(20005, "用户已存在"),
USER_PASSWORD_ERROR(20006, "用户密码错误"),
USER_PASSWORD_MODIFY_SUCCESS(20007, "修改密码成功"),
USER_PASSWORD_MODIFY_FAIL(20008, "修改密码失败"),
USER_LOGIN_SUCCESS(20009, "登录成功"),
USER_LOGIN_FAIL(20010, "登录失败"),
/* 权限错误:70001-79999 */
PERMISSION_NO_ACCESS(70001, "无访问权限");
private final Integer code;
private final String msg;
ResultCode(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}