前后端交互统一响应结果Result

44 阅读4分钟
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

/**
 * 全局统一响应结果封装类
 * 用于统一接口返回格式,便于前端统一处理响应数据、错误信息
 * 响应格式遵循 RESTful 设计规范,包含状态码、描述信息、业务数据三部分
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result { // 泛型化改造,提升类型安全性,避免强制类型转换

    /**
     * 响应状态码(参考 HTTP 状态码语义,扩展业务状态码)
     * 2xx: 成功(如 200-操作成功)
     * 4xx: 客户端错误(如 400-参数错误、401-未授权、403-权限不足、404-资源不存在)
     * 5xx: 服务端错误(如 500-系统异常、503-服务不可用)
     */
    private Integer code;

    /**
     * 响应描述信息
     * 成功时返回友好提示,失败时返回具体错误原因(前端可直接展示)
     */
    private String msg;

    /**
     * 响应业务数据
     * 成功时返回查询结果、操作结果等业务数据,失败时可返回 null 或错误详情
     */
    private T data;

    // ==================== 成功响应快捷方法 ====================

    /**
     * 无数据返回的成功响应(适用于增、删、改操作)
     * 默认状态码 200,描述信息 "操作成功"
     * @return 统一成功响应对象
     */
    public static  Result success() {
        return new Result<>(200, &#34;操作成功&#34;, null);
    }

    /**
     * 带数据返回的成功响应(适用于查询操作)
     * 默认状态码 200,描述信息 &#34;查询成功&#34;
     * @param data 业务数据(如列表、详情、统计结果等)
     * @return 带数据的成功响应对象
     */
    public static  Result success(T data) {
        return new Result<>(200, &#34;查询成功&#34;, data);
    }

    /**
     * 自定义描述信息的成功响应(适用于特殊场景,如 &#34;创建成功&#34;、&#34;更新成功&#34;)
     * 默认状态码 200,支持自定义描述信息
     * @param msg 自定义成功描述
     * @param data 业务数据(可为 null)
     * @return 自定义描述的成功响应对象
     */
    public static  Result success(String msg, T data) {
        return new Result<>(200, msg, data);
    }

    // ==================== 客户端错误响应快捷方法 ====================

    /**
     * 客户端参数错误响应(适用于参数校验失败)
     * 状态码 400,支持自定义错误描述
     * @param msg 参数错误详情(如 &#34;用户名不能为空&#34;)
     * @return 参数错误响应对象
     */
    public static  Result badRequest(String msg) {
        return new Result<>(400, msg, null);
    }

    /**
     * 未授权响应(适用于未登录、token 失效)
     * 状态码 401,默认描述 &#34;未授权,请先登录&#34;
     * @return 未授权响应对象
     */
    public static  Result unauthorized() {
        return new Result<>(401, &#34;未授权,请先登录&#34;, null);
    }

    /**
     * 权限不足响应(适用于已登录但无操作权限)
     * 状态码 403,默认描述 &#34;权限不足,无法操作&#34;
     * @return 权限不足响应对象
     */
    public static  Result forbidden() {
        return new Result<>(403, &#34;权限不足,无法操作&#34;, null);
    }

    /**
     * 资源不存在响应(适用于查询的资源不存在)
     * 状态码 404,默认描述 &#34;请求的资源不存在&#34;
     * @return 资源不存在响应对象
     */
    public static  Result notFound() {
        return new Result<>(404, &#34;请求的资源不存在&#34;, null);
    }

    // ==================== 服务端错误响应快捷方法 ====================

    /**
     * 服务端通用错误响应(适用于系统异常、未知错误)
     * 状态码 500,默认描述 &#34;系统繁忙,请稍后再试&#34;
     * @return 服务端错误响应对象
     */
    public static  Result error() {
        return new Result<>(500, &#34;系统繁忙,请稍后再试&#34;, null);
    }

    /**
     * 自定义描述的服务端错误响应(适用于已知的服务端异常)
     * 状态码 500,支持自定义错误描述
     * @param msg 错误详情(如 &#34;数据库连接失败&#34;)
     * @return 自定义描述的服务端错误响应对象
     */
    public static  Result error(String msg) {
        return new Result<>(500, msg, null);
    }

    /**
     * 自定义状态码和描述的错误响应(适用于特殊业务错误)
     * 支持自定义状态码和描述信息,灵活应对业务场景
     * @param code 自定义状态码
     * @param msg 错误描述
     * @return 自定义错误响应对象
     */
    public static  Result error(Integer code, String msg) {
        return new Result<>(code, msg, null);
    }
}

使用示例

// 1. 增删改成功(无数据返回) 
return Result.success(); 

// 2. 查询成功(带数据返回) 
List userList = userService.list(); 
return Result.success(userList);

// 3. 自定义成功描述(如创建成功) 
User user = userService.save(userDTO);
return Result.success(&#34;用户创建成功&#34;, user); 

// 4. 参数错误(客户端错误) 
if (StringUtils.isEmpty(userDTO.getName())) { 
    return Result.badRequest(&#34;用户名不能为空&#34;); 
}

// 5. 未登录(客户端错误) 
return Result.unauthorized();

// 6. 资源不存在(客户端错误) 
User user = userService.getById(id);
if (user == null) { 
    return Result.notFound(); 
} 

// 7. 系统异常(服务端错误) 
try { 
    // 业务逻辑 
} catch (Exception e) { 
    log.error(&#34;系统异常&#34;, e); 
    return Result.error(); 
} 

// 8. 自定义业务错误(如库存不足) 
if (goods.getStock() < 1) { 
    return Result.error(600, &#34;库存不足,无法下单&#34;); 
}