前言
作为后端服务器,返回给前端的数据需要统一格式,一般为:
{
code:200,
msg: "接口请求成功",
data:...
}
为了方便开发,会考虑对返回状态、返回结构体进行封装
统一响应码
响应状态
@Getter
@AllArgsConstructor
public enum ResponseStatus {
OK(20000, "操作成功"),
ERROE(55555, "操作失败"),
FORM_VALID_ERROR(33333, "表单校验失败"),
ADMIN_EXIST(33334, "员工已存在"),
NOT_IMG(33335, "不是图片"),
IMG_TYPE_ERROR(33336, "图片格式不正确"),
IMG_TOO_LARGE(33337, "图片太大"),
IMG_SIZE_ERROR(33338, "图片尺寸不正确"),
UPLOAD_ERROR(33339, "图片上传失败"),
UNKOWN_ERROR(50000, "服务器错误"),
NO_LOGIN(44444, "未登录"),
NO_PERM(44555, "没权限"),
RETURN_STRING_ERROR(47777, "返回String类型错误"),
;
private int status;
private String message;
public void setStatus(int status) {
this.status = status;
}
public void setMessage(String message) {
this.message = message;
}
}
响应结果
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseResult<T> {
private int status;
private String message;
private T data;
private ResponseResult(ResponseStatus responseStatus, T t) {
this.status = responseStatus.getStatus();
this.message = responseStatus.getMessage();
this.data = t;
}
/**
* 成功的方法
*/
public static <T> ResponseResult<T> success() {
return getInstance(ResponseStatus.OK, null);
}
/**
* 成功的方法
* 携带数据
*/
public static <T> ResponseResult<T> success(T t) {
return getInstance(ResponseStatus.OK, t);
}
/**
* 失败的方法
*/
public static <T> ResponseResult<T> error() {
return getInstance(ResponseStatus.ERROE, null);
}
/*
自定义失败状态码
*/
public static <T> ResponseResult<T> error(ResponseStatus responseStatus) {
return getInstance(responseStatus, null);
}
/**
* 自定义状态码和数据
*
* @param responseStatus
* @param t
* @param <T>
* @return
*/
public static <T> ResponseResult<T> error(ResponseStatus responseStatus, T t) {
return getInstance(responseStatus, t);
}
/**
* 失败的方法
*/
public static <T> ResponseResult<T> error(T t) {
return getInstance(ResponseStatus.ERROE, t);
}
private static <T> ResponseResult<T> getInstance(ResponseStatus responseStatus, T t) {
return new ResponseResult<T>(responseStatus, t);
}
}
例子
@RestController
public class XxxController {
@Autowired
XxxService xxxService;
@RequestMapping("xxx")
public ResponseResult xxx() {
return ResponseResult.success(xxxService.xxx());
}
}
这样返回的就是自定义格式,当然具体的实现会根据项目进行调整,这些只是大致原理