Springboot项目返回数据统一封装,支持swagger。
正常swagger会根据数据库表的注释显示对应的参数释义等。但当我们使用统一接口返回map时,部分注释等信息会被掩盖消失。在此提供三个java类即可满足统一封装返回接口,也可显示对应的swagger释义等。
1.ErrorCode.java
package com.hng.error;/*** @Author: 郝南过* @Description: TODO* @Date: 2023/11/14 10:56* @Version: 1.0*/
public interface ErrorCode {String getCode();String getMessage();
}
2.ErrorEnum.java
package com.hng.error;public enum ErrorEnum implements ErrorCode {/*** 成功*/SUCCESS("SUCCESS", "成功"),//*********************系统异常*********************///*** 请求失败(外域请求等)*/REQUEST_FAIL("REQUEST_FAIL", "请求失败"),/*** 系统异常*/SYSTEM_ERROR("SYSTEM_ERROR", "系统异常"),/*** 操作超时*/OP_TIMEOUT("OP_TIMEOUT", "操作超时,请重试"),/*** 操作冲突(乐观锁、并发)*/OP_CONFLICT("OP_CONFLICT", "操作冲突"),/*** 数据库执行错误*/DB_ERROR("DB_ERROR", "数据库执行错误"),//*********************业务类异常*********************///*** 参数错误*/PARAMETER_ERROR("PARAMETER_ERROR", "参数错误"),/*** 没有权限*/NO_PRIVILEGE("NO_PRIVILEGE", "没有权限"),/*** 数据异常(数据校验不通过等)*/DATA_ERROR("DATA_ERROR", "数据异常"),/*** 数据不存在(数据校验等)*/DATA_NOT_FOUND("DATA_NOT_FOUND", "数据不存在"),/*** 数据已存在(数据校验等)*/DATA_EXIST("DATA_EXIST", "数据已存在");/*** 结果码*/private String code;/*** 结果信息*/private String message;ErrorEnum(String code, String message) {this.code = code;this.message = message;}@Overridepublic String getCode() {return this.code;}@Overridepublic String getMessage() {return this.message;}
}
3.Result.java
package com.hng.response;import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hng.error.ErrorEnum;
import lombok.Data;@Data
public class Result<T> {private String code;private String msg;private T data;@JsonIgnorepublic boolean getSuccess() {return this.code.equals(ErrorEnum.SUCCESS.getCode());}private Result(String code, String msg, T data) {this.code = code;this.msg = msg;this.data = data;}private Result(ErrorEnum errorEnum, T data) {this.code = errorEnum.getCode();this.msg = errorEnum.getMessage();this.data = data;}public static <T> Result<T> Result(ErrorEnum errorEnum, T data) {return new Result<>(errorEnum, data);}public static <T> Result<T> Result(String code, String msg, T data) {return new Result<>(code, msg, data);}
}
4.controller中使用
@ResponseBody@PostMapping("/getUser")public Result<SysUser> getUserById(@RequestParam Long userId){SysUser sysUser = sysUserService.getUserById(userId);if (Objects.isNull(sysUser)) {return Result.Result(ErrorEnum.DATA_NOT_FOUND, null);}return Result.Result(ErrorEnum.SUCCESS, sysUser);}
5.结果展示