在前后端分离开发模式大行其道的今天,现在大多数公司项目框架,基本都是属于前后端分离模式,这种模式会涉及到一个前后端对接问题,无论是对前端或者是后台服务,维护一套完善且规范的接口是非常有必要的。
@Data
@ApiModel(description = "返回值结果对象")
public class Result<T> {
@ApiModelProperty(value = "是否成功")
private Boolean success;
@ApiModelProperty(value = "结果编码")
private Integer code;
@ApiModelProperty(value = "结果信息")
private String msg;
@ApiModelProperty(value = "数据载体")
private T data;
private static <T> Result<T> build(T data, Integer code, String msg, Boolean success) {
Result<T> result = new Result<>();
result.setData(data);
result.setCode(code);
result.setMsg(msg);
result.setSuccess(success);
return result;
}
public static <T> Result<T> success() {
return build(null,
ResponseConstant.REQUEST_SUCCESS_CODE,
ResponseConstant.REQUEST_SUCCESS_MSG,
ResponseConstant.SUCCESS);
}
public static <T> Result<T> success(T data) {
return build(data,
ResponseConstant.REQUEST_SUCCESS_CODE,
ResponseConstant.REQUEST_SUCCESS_MSG,
ResponseConstant.SUCCESS);
}
public static <T> Result<T> fail() {
return build(null,
ResponseConstant.REQUEST_FAIL_CODE,
ResponseConstant.REQUEST_FAIL_MSG,
ResponseConstant.FAIL);
}
public static <T> Result<T> fail(T data) {
return build(data,
ResponseConstant.REQUEST_FAIL_CODE,
ResponseConstant.REQUEST_FAIL_MSG,
ResponseConstant.FAIL);
}
public static <T> Result<T> fail(Integer code, String msg) {
return build(null, code, msg, ResponseConstant.FAIL);
}
}
@DeleteMapping("/{id})")
public Result<Void> deleteUser(@PathVariable("id") Long id) {
userService.deleteUser(id);
return Result.success();
}
@GetMapping("/{id})")
public Result<User> getUserById(@PathVariable("id") Long id) {
User user = userService.getUserById(id);
return Result.success(user);
}
@DeleteMapping("/{id})")
public Result<Void> deleteUser(@PathVariable("id") Long id) {
userService.deleteUser(id);
return Result.fail();
}
@PostMapping("/batchSave")
public Result<Collection<User>> batchSave(@RequestBody Collection<User> users) {
Collection<User> saveFailUsers = userService.batchSave(users);
// 返回保存失败的用户
return Result.fail(saveFailUsers);
}
@PutMapping("/{id}")
public Result<Void> updateById(@PathVariable("id") Long id) {
try {
userService.updateById(id);
} catch (BusinessException e) {
return Result.fail(e.getCode(), e.getMessage());
}
return Result.success();
}
@Data
@ApiModel(description = "分页结果对象")
public class PageResult<T> {
@ApiModelProperty(value = "当前页码")
private Integer currentPage;
@ApiModelProperty(value = "当前页数量")
private Integer pageSize;
@ApiModelProperty(value = "总记录数")
private Long recordCount;
@ApiModelProperty(value = "总页数")
private Integer sumPage;
@ApiModelProperty(value = "是否成功")
private Boolean success;
@ApiModelProperty(value = "结果编码")
private Integer code;
@ApiModelProperty(value = "结果信息")
private String msg;
@ApiModelProperty(value = "数据载体")
private Collection<T> data;
public PageResult() {
}
// 这里的 Page 通常是第三方插件如 PageHelper 产生的 Page 对象
public static <T> PageResult<T> success(Page<T> page) {
return success(page.getResult(),
page.getPageNum(),
page.getPageSize(),
page.getTotal(),
page.getPages());
}
public static <T> PageResult<T> success(Collection<T> data,
Integer currentPage,
Integer pageSize,
Long recordCount,
Integer sumPage) {
PageResult<T> pageResult = new PageResult<>();
pageResult.setData(data);
pageResult.setCurrentPage(currentPage);
pageResult.setPageSize(pageSize);
pageResult.setRecordCount(recordCount);
pageResult.setSumPage(sumPage);
pageResult.setCode(ResponseConstant.REQUEST_SUCCESS_CODE);
pageResult.setMsg(ResponseConstant.REQUEST_SUCCESS_MSG);
pageResult.setSuccess(ResponseConstant.SUCCESS);
return pageResult;
}
public static <T> PageResult<T> noData(){
return success(null, 0, 0, 0L, 0);
}
public static <T> PageResult<T> fail() {
PageResult<T> pageResult = new PageResult<>();
pageResult.setData(null);
pageResult.setCurrentPage(0);
pageResult.setPageSize(0);
pageResult.setRecordCount(0L);
pageResult.setSumPage(0);
pageResult.setCode(ResponseConstant.REQUEST_FAIL_CODE);
pageResult.setMsg(ResponseConstant.REQUEST_FAIL_MSG);
pageResult.setSuccess(ResponseConstant.FAIL);
return pageResult;
}
public static <T> PageResult<T> fail(Integer code, String msg) {
PageResult<T> pageResult = fail();
pageResult.setCode(code);
pageResult.setMsg(msg);
return pageResult;
}
}
工具 — Dec 2, 2022