Java前后端分离定义统一结果返回类 ゝ一世哀愁。 2023-09-27 13:12 84阅读 0赞 项目中我们会将响应封装成json返回, 一般在项目中我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。一般会包含**状态码**、**返回消息**、**数据**这几部分内容。 #### 1.一般有以下几种json返回形式: #### **列表:** { "code": 200, "message": "成功", "data": [ { "id": 2, "roleName": "系统管理员" } ], "ok": true } **分页:** { "code": 200, "message": "成功", "data": { "records": [ { "id": 2, "roleName": "系统管理员" }, { "id": 3, "name": "普通管理员" } ], "total": 10, "size": 3, "current": 1, "orders": [], "hitCount": false, "searchCount": true, "pages": 2 }, "ok": true } **无数据返回:** { "code": 200, "message": "成功", "data": null, "ok": true } **失败:** { "code": 201, "message": "失败", "data": null, "ok": false } #### 2.定义统一返回结果类 #### import lombok.Data; /** * 全局统一返回结果类 * */ @Data public class Result<T> { //返回码 private Integer code; //返回消息 private String message; //返回数据 private T data; public Result(){} // 返回数据 protected static <T> Result<T> build(T data) { Result<T> result = new Result<T>(); if (data != null) result.setData(data); return result; } public static <T> Result<T> build(T body, Integer code, String message) { Result<T> result = build(body); result.setCode(code); result.setMessage(message); return result; } public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) { Result<T> result = build(body); result.setCode(resultCodeEnum.getCode()); result.setMessage(resultCodeEnum.getMessage()); return result; } public static<T> Result<T> ok(){ return Result.ok(null); } /** * 操作成功 * @param data baseCategory1List * @param <T> * @return */ public static<T> Result<T> ok(T data){ Result<T> result = build(data); return build(data, ResultCodeEnum.SUCCESS); } public static<T> Result<T> fail(){ return Result.fail(null); } /** * 操作失败 * @param data * @param <T> * @return */ public static<T> Result<T> fail(T data){ Result<T> result = build(data); return build(data, ResultCodeEnum.FAIL); } public Result<T> message(String msg){ this.setMessage(msg); return this; } public Result<T> code(Integer code){ this.setCode(code); return this; } } #### 3.统一返回结果状态信息类 #### import lombok.Getter; /** * 统一返回结果状态信息类 * */ @Getter public enum ResultCodeEnum { SUCCESS(200,"成功"), FAIL(201, "失败"), SERVICE_ERROR(2012, "服务异常"), DATA_ERROR(204, "数据异常"), ILLEGAL_REQUEST(205, "非法请求"), REPEAT_SUBMIT(206, "重复提交"), ARGUMENT_VALID_ERROR(210, "参数校验异常"), LOGIN_AUTH(208, "未登陆"), PERMISSION(209, "没有权限"), ACCOUNT_ERROR(214, "账号不正确"), PASSWORD_ERROR(215, "密码不正确"), LOGIN_MOBLE_ERROR( 216, "账号不正确"), ACCOUNT_STOP( 217, "账号已停用"), NODE_ERROR( 218, "该节点下有子节点,不可以删除") ; private Integer code; private String message; private ResultCodeEnum(Integer code, String message) { this.code = code; this.message = message; } } #### 4.接口该怎么写 #### 以简单的增删改查为例: 查找方法:有数据返回 @GetMapping("findAll") public Result<List<SysRole>> findAll() { List<SysRole> roleList = sysRoleService.list(); return Result.ok(roleList); } 删除方法:无数据返回 @ApiOperation("批量删除角色") @DeleteMapping("/batchRemove") public Result batchRemove(@RequestBody List<Long> ids) { boolean isDelete = sysRoleService.removeByIds(ids); if (isDelete) { return Result.ok(); } else { return Result.fail(); } }
还没有评论,来说两句吧...