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;
}
@Override
public String getCode() {
return this.code;
}
@Override
public 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;
@JsonIgnore
public 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.结果展示