欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springmvc统一返回数据格式

程序员文章站 2024-02-03 10:13:58
...

springmvc统一返回数据格式

springmvc会封装响应成json返回,一般我们会将所有接口的数据格式统一, 使前端(iOS Android, Web)对数据的操作更一致、轻松。我们可以将返回数据格式统一为:1.状态码;2.返回消息;3.数据。
如下:

{
  "success": 布尔, //响应是否成功
  "code": 数字, //响应码
  "message": 字符串, //返回消息
  "data": HashMap //返回数据,放在键值对中
}

接下来进行统一返回数据格式的配置:

1、创建返回码定义枚举类

在guli-framework-common中创建包com.guli.common.constants,创建枚举类 ResultCodeEnum.java

@Getter
public enum ResultCodeEnum {

	SUCCESS(true, 20000,"成功"),
	UNKNOWN_REASON(false, 20001, "未知错误"),
	BAD_SQL_GRAMMAR(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数据导入错误");

	private Boolean success;

	private Integer code;

	private String message;

	private ResultCodeEnum(Boolean success, Integer code, String message) {
		this.success = success;
		this.code = code;
		this.message = message;
	}
}

2、创建结果类

创建包com.guli.common.vo,创建类 R.java
vo:View Object

@Data
@ApiModel(value = "全局统一返回结果")
public class R {

	@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 R(){}

	public static R ok(){
		R r = new R();
		r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
		r.setCode(ResultCodeEnum.SUCCESS.getCode());
		r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
		return r;
	}

	public static R error(){
		R r = new R();
		r.setSuccess(ResultCodeEnum.UNKNOWN_REASON.getSuccess());
		r.setCode(ResultCodeEnum.UNKNOWN_REASON.getCode());
		r.setMessage(ResultCodeEnum.UNKNOWN_REASON.getMessage());
		return r;
	}

	public static R setResult(ResultCodeEnum resultCodeEnum){
		R r = new R();
		r.setSuccess(resultCodeEnum.getSuccess());
		r.setCode(resultCodeEnum.getCode());
		r.setMessage(resultCodeEnum.getMessage());
		return r;
	}

	public R success(Boolean success){
		this.setSuccess(success);
		return this;
	}

	public R message(String message){
		this.setMessage(message);
		return this;
	}

	public R code(Integer code){
		this.setCode(code);
		return this;
	}

	public R data(String key, Object value){
		this.data.put(key, value);
		return this;
	}

	public R data(Map<String, Object> map){
		this.setData(map);
		return this;
	}
}

r.setSuccess()方法返回success状态码
r.setCode()方法返回响应码
r.setMessage()方法返回消息
data()方法获取需要向前端传递的数据
以上四个方法的结果封装在R对象内,然后springmvc将R对象返回给前端。以达到统一返回数据格式。

总结

统一返回数据格式,再结合swaggerAPI文档规范,使得数据呈现在前端是清晰且有条理的。感谢你的阅读,希望这篇文章能给你带来帮助。我是黑马Jack,一起学习一起进步!