1.为什么需要统一返回格式
在controller方法中返回到前端的数据类型多变,比如校验验证码是返回 Boolean数据类型, 分页数据是返回 List 数据类型 等, 多个返回类型使得前端与 后端人员的交流复杂起来, 而统一规约一个返回到前端的数据格式,就可以大大减轻繁琐的交流工作,提高工作效率
# 2.通用的两个Result类 **说明: 这里用到了 Swagger3 和 Lombok 的注解,看个人需要进行修改** **1.ResultEnumCode枚举类**
package com.infoshare.return_result;
import lombok.Getter;
@Getter
public enum ResultCodeEnum {
SUCCESS(true,20000,"成功"),
UNKNOW_REASON(false,20001,"未知错误"),
BAD_SQL_GRAMMER(false,21001,"sql语法错误"),
JSON_PARSE_ERROR(false,21002,"json解析异常"),
PARAM_ERROR(false,21003,"参数不正确"),
FILE_UPLOAD_ERROR(false,21004,"文件上传错误"),
EXCEL_DATA_IMPORT_ERROR(false,21005,"Excel数据导入错误"),
ERROR_AUTH_CODE(false,21006,"验证码错误!"),
ERROR_NOT_EXISTS_USER(false,21007,"用户不存在!"),
ERROR_PASSWORD(false,21008,"密码错误,请重新输入!"),
SUCCESS_LOGIN(true,20000,"登陆成功!"),
SUCCESS_REGISTER(true,20000,"注册成功!");
private Boolean status; //响应是否成功
private Integer code; //返回码
private String message; //返回消息
ResultCodeEnum(Boolean status, Integer code, String message) {
this.status = status;
this.code = code;
this.message = message;
}
}
2.Result 类
package com.infoshare.return_result;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
@ApiModel(value = "统一返回数据格式")
public class Result {
@ApiModelProperty(value = "是否成功")
private Boolean success;
@ApiModelProperty(value = "返回码")
private Integer code;
@ApiModelProperty(value = "返回消息")
private String message;
@ApiModelProperty(value = "返回数据")
private Map<String,Object> data = new HashMap<String ,Object>();
private Result(){
}
public static Result ok(){
Result r = new Result();
r.setCode(ResultCodeEnum.SUCCESS.getCode());
r.setSuccess(ResultCodeEnum.SUCCESS.getStatus());
r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
return r;
}
public static Result error(){
Result r = new Result();
r.setCode(ResultCodeEnum.UNKNOW_REASON.getCode());
r.setSuccess(ResultCodeEnum.UNKNOW_REASON.getStatus());
r.setMessage(ResultCodeEnum.UNKNOW_REASON.getMessage());
return r;
}
public static Result ok(ResultCodeEnum codeEnum){
Result r = new Result();
r.setCode(codeEnum.getCode());
r.setSuccess(codeEnum.getStatus());
r.setMessage(codeEnum.getMessage());
return r;
}
public static Result error(ResultCodeEnum codeEnum){
Result r = new Result();
r.setCode(codeEnum.getCode());
r.setSuccess(codeEnum.getStatus());
r.setMessage(codeEnum.getMessage());
return r;
}
public Re
sult data(Map<String,Object> map){
this.setData(map);
return this;
}
public Result data(String key,Object value){
this.data.put(key,value);
return this;
}
public Result message(String message){
this.setMessage(message);
return this;
}
public Result code(Integer code){
this.setCode(code);
return this;
}
public Result success(Boolean success){
this.setSuccess(success);
return this;
}
}
3.controller 层返回 Result 例子
4.前端接收 Result 数据例子
5.Swagger3接口文档显示返回数据格式验证
总结
使用统一数据格式返回,极大的提高了前端和后端独立开发的效率,同时也使得项目整体的开发变得简洁,后端可以根据需求文档自定义一些错误和成功提示消息和状态码放到 ResultCodeEnum 枚举类中,然后调用Result.ok()或者是Result.error()静态方法去返回对应的枚举常量,使得项目的维护变得简洁