为了规范返回结果,保证返回结果风格统一,提高编码效率与前端调试效率,封装通用返回结果类、通用分页结果类。
本文还提供了简单的使用示例和源代码。
系列文章指路👉
系列文章-基于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 code
、String message
和T 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 <T> 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;}
}