一般来说,统一的返回值会放到公共模块,被所有模块使用,同时要求所有前端返回值都需要用这个返回值接口进行封装
@Data
public class Result<T> implements Serializable {
private Integer code; // 状态码,如 200 成功,400 参数错误,500 服务异常
private String message; // 提示信息
private T data; // 业务数据
// 受保护构造,允许子类调用
protected Result() {}
protected Result(Integer code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
// 成功:无数据
public static <T> Result<T> success() {
return new Result<>(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), null);
}
// 成功:带数据
public static <T> Result<T> success(T data) {
return new Result<>(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), data);
}
// 失败:自定义错误码和消息
public static <T> Result<T> error(ResponseCode error) {
return new Result<>(error.getCode(), error.getMsg(), null);
}
// 失败:通用错误
public static <T> Result<T> error(String message) {
return new Result<>(ResponseCode.FAIL.getCode(), message, null);
}
// 判断是否成功(可选)
// 没有对应属性 不要加is ,否则json的反序列化会出错!!! json格式化会以为Success是一个字段
public boolean isSuccess() {
return this.code != null && this.code == 200;
}
}
- 直接用result封装好的静态方法
return Result.<Integer>success(count);
- 根据具体业务需要扩展Result的一些方法,字段,或兼容一些旧的接口返回值,或要求返回值语义更加明显如
LoginResult比Result<LoginInfo>更直观
如分页返回值,我们将分页开启和数据封装到Reslut方法中,解耦分页插件和具体业务的使用,替换分页插件的时候修改Reslut内的方法即可
```Java
@Data
@EqualsAndHashCode(callSuper = true)
public class PageResult<T> extends Result<PageData<T>> {
protected PageResult(Integer code, String message, PageData<T> data) {
super(code, message, data);
}
/**
* 分页成功
*/
public static <T> PageResult<T> success(List<T> list, long total) {
PageData<T> pageData = new PageData<>(list, total);
return new PageResult<>(200, "操作成功", pageData);
}
/**
* 空分页
*/
public static <T> PageResult<T> empty() {
return success(java.util.Collections.emptyList(), 0);
}
/**
* 自定义消息的分页成功
*/
public static <T> PageResult<T> success(String message, List<T> list, long total) {
PageData<T> pageData = new PageData<>(list, total);
return new PageResult<>(200, message, pageData);
}
/**
* 分页失败
*/
public static <T> PageResult<T> error(String message) {
return new PageResult<>(500, message, null);
}
// 开启分页 : 解耦分页插件和具体业务的使用,后续更改插件使用更方便
public static void startPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum,pageSize);
}
}
```