Springboot--结果返回类

本文介绍了如何通过泛型定义结果类(如R和ResultVo),统一数据模型,实现状态管理和错误处理。重点讲解了JsonResult类的使用,以及如何通过枚举管理不同操作的状态码。
摘要由CSDN通过智能技术生成

1.作用

统一数据在前后端通信的规范,帮助前端开发者更好地组织和管理前端数据,提高代码质量和开发效率。

数据模型:将从服务器端获取的数据映射为前端的数据模型,便于在前端进行处理和展示。

状态管理:通过定义不同的结果返回类来管理不同的状态,例如成功、失败、加载中等状态,从而更好地控制前端应用的状态流转。

错误处理:将错误信息封装在结果返回类中,便于统一处理和展示错误信息,提高用户体验。

2.使用泛型定义结果类

@Data
public class R<T> {

    private Integer code; //编码:1成功,0和其它数字为失败

    private String msg; //错误信息

    private T data; //数据

    private Map map = new HashMap(); //动态数据

    public static <T> R<T> success(T object) {
        R<T> r = new R<T>();
        r.data = object;
        r.code = 1;
        return r;
    }

    public static <T> R<T> error(String msg) {
        R r = new R();
        r.msg = msg;
        r.code = 0;
        return r;
    }

    public R<T> add(String key, Object value) {
        this.map.put(key, value);
        return this;
    }

}

属性和方法:

  • code:表示操作结果的编码,1 表示成功,0 或其他数字表示失败。
  • msg:表示错误信息。
  • data:表示返回的数据。
  • map:表示动态数据,使用 HashMap 实现。

方法包括:

  • success:静态方法,表示操作成功,返回一个 R 对象,设置 code 为 1,并将数据存入 data 属性。
  • error:静态方法,表示操作失败,返回一个 R 对象,设置 code 为 0,并将错误信息存入 msg 属性。
  • add:向 map 中添加动态数据,返回当前对象。

使用

一个简单的api,不需要返回什么数据

    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest request){

        //清除session
        request.getSession().removeAttribute("employee");
        return R.success("退出成功");
    }

简单的泛型实现

@Data
public class ResultVo<T> {
    private Integer code;
    private T data;
}

通过生成实例使用,将对象返回给前端。

3. 使用object 

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class JsonResult {
    /**
     * 响应状态码(业务状态码)
     */
    private Integer code;
    /**
     * 状态码的含义(比如: 用户名被占用)
     */
    private String msg;
    /**
     * 服务器端返回给客户端的具体数据(可能是VO对象,或者List集合)
     */
    private Object data;

    /**
     * 构造器1: 适用于不需要返回具体数据的Controller方法
     */
    public JsonResult(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 构造器2: 适用于不需要返回具体数据的Controller方法,使用了自定义枚举
     */
    public JsonResult(StatusCode statusCode) {
        this.code = statusCode.getCode();
        this.msg = statusCode.getMsg();
    }

    /**
     * 构造器3: 适用于需要返回具体数据的Controller方法,使用了自定义枚举
     */
    public JsonResult(StatusCode statusCode, Object data) {
        this.code = statusCode.getCode();
        this.msg = statusCode.getMsg();
        this.data = data;
    }

    /**
     * 构造器4: 用于快速构建成功的返回结果
     */
    public JsonResult(Object data) {
        this.code = StatusCode.SUCCESS.getCode();
        this.msg = StatusCode.SUCCESS.getMsg();
        this.data = data;
    }

    public static JsonResult ok(Object data) {
        return new JsonResult(data);
    }
    public static JsonResult ok() {
        return ok(null);
    }
}
/**
 * 状态代码枚举类
 */
@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum StatusCode {
    /*枚举类型*/
    SUCCESS(1, "OK"),
    NOT_LOGIN(1000, "未登录"),
    LOGIN_SUCCESS(1001, "登录成功"),
    PASSWORD_ERROR(3, "密码错误"),
    USERNAME_ERROR(2, "用户名错误"),
    USERNAME_ALREADY_EXISTS(1004, "用户名已存在"),
    FORBIDDEN_ERROR(1005, "无权访问"),
    OPERATION_SUCCESS(2001, "操作成功"),
    OPERATION_FAIL(2002, "操作失败"),
    VALIDATE_ERROR(3002, "参数校验失败");

    //属性要放在最下面
    private Integer code;
    private String msg;

}

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值