基于SpringBoot封装通用返回结果类

为了规范返回结果,保证返回结果风格统一,提高编码效率与前端调试效率,封装通用返回结果类、通用分页结果类。
本文还提供了简单的使用示例和源代码。

系列文章指路

系列文章-基于SpringBoot3创建项目并配置常用的工具和一些常用的类

文章目录

  • 1. 封装结果枚举
  • 2. 封装通用的返回结果
    • 结构
    • 构造方法
    • 常用的静态方法
  • 3. 封装通用分页结果
    • 结构
    • 使用
  • 4. 源码:
    • BaseResult
    • PageResult

1. 封装结果枚举

使用了Lombok,可以根据业务自由扩展

@Getter
public enum ResultEnum {
    SUCCESS(200,"请求成功"),
    FAILED(300, "请求失败");

    public final int code;
    public final String message;

    ResultEnum(int code, String message){
        this.code=code;
        this.message=message;
    }
}

2. 封装通用的返回结果

源代码见文末 BaseResult

结构

返回结果包含int codeString messageT data

构造方法

  • 仅返回编码和消息,不附加数据: public BaseResult(int code, String message)
  • 使用枚举,不附加数据:public BaseResult(ResultEnum resultEnum)
  • 返回编码和消息,附加数据:public BaseResult(int code, String message, T data)
  • 使用枚举,附加数据:public BaseResult(ResultEnum resultEnum, T data)

常用的静态方法

使用上述的构造方法可以满足100%需求,除此之外提供一些常用的静态方法,简化代码,提高开发效率。
对于静态方法覆盖不到的返回方式(例如既返回失败信息又想附带数据),可以使用构造方法,也可以根据业务使用频率扩展静态方法。

成功的操作通常分为两种:

  • 仅返回成功枚举中的code和message,不附带数据的,例如:修改成功、上架成功等: public static BaseResult success()
  • 附带结果集,例如:列表查询、单条查询等:public static BaseResult success(T data)

失败的操作:

  • 仅返回失败枚举中的code和message:public static BaseResult fail()
  • 多数情况下,需要将失败信息返回,提示失败原因:public static BaseResult fail(String message)

3. 封装通用分页结果

源代码见文末 PageResult

结构

总记录数long total,当前页数据列表T records

使用

前端传入{offset、limit}或者{pageNum、pageSize}二者任选。
后端组织分页结果后放入通用的结果中。

    @GetMapping("/pageQuery")
    @Operation(summary = "pageQuery", description = "分页查询")
    public Object pageQuery(@RequestParam(defaultValue = "0", value = "offset") int offset,
                            @RequestParam(defaultValue = "10", value = "limit") int limit) {
        PageHelper.offsetPage(offset,limit);
        List<Fruit> fruits = fruitService.list();
        PageInfo<Fruit> page = new PageInfo<>(fruits);
        PageResult<List<Fruit>> pageRes = new PageResult<>(page.getTotal(), fruits);
        return BaseResult.success(pageRes);
    }

4. 源码:

BaseResult

@Tag(name = "BaseResult", description = "通用返回结果")
@Data
public class BaseResult<T> {

    @Schema(description = "返回编码")
    public int code;
    @Schema(description = "返回信息")
    public String message;

    @Schema(description = "返回数据")
    public T data;

    private BaseResult() {
    }

    public BaseResult(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public BaseResult(ResultEnum resultEnum) {
        this.code = resultEnum.getCode();
        this.message = resultEnum.getMessage();
    }

    public BaseResult(int code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public BaseResult(ResultEnum resultEnum, T data) {
        this.code = resultEnum.getCode();
        this.message = resultEnum.getMessage();
        this.data = data;
    }

    /**
     * 默认形式,无返回数据成功
     * @return BaseResult
     */
    public static BaseResult<?> success() {
        return new BaseResult<>(ResultEnum.SUCCESS);
    }

    /**
     * 附带数据的成功
     * @param data 数据
     * @return BaseResult
     */
    public static <T> BaseResult<?> success(T data) {
        return new BaseResult<>(ResultEnum.SUCCESS,data);
    }

    /**
     * 默认形式,无返回数据失败
     * @return BaseResult
     */
    public static BaseResult<?> fail() {
        return new BaseResult<>(ResultEnum.FAILED);
    }

    /**
     * 携带信息,返回失败
     * @param message 失败信息
     * @return BaseResult
     */
    public static BaseResult<?> fail(String message) {
        return new BaseResult<>(ResultEnum.FAILED.code,message);
    }
}

PageResult

@Tag(name = "PageResult", description = "分页返回结果")
@Data
public class PageResult <T> {

    @Schema(description = "总记录数")
    public long total;

    @Schema(description = "数据列表")
    public T records;

    public PageResult() {
        this.total = 0L;
        this.records = null;
    }
    public PageResult(long total, T records) {
        this.total = total;
        this.records = records;
    }
}

你可能感兴趣的:(Java,spring,boot,java)