Java 前后端 统一返回数据格式
Posted adaicoffee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 前后端 统一返回数据格式相关的知识,希望对你有一定的参考价值。
1 概述
现在前后端交互,基本上都有统一的返回数据结构,因此我特地总结了相关知识,形成这篇博客。
2 状态码定义
/**
* description: 基本返回状态码
*/
public enum RespBasicCode
/**
* 4xx 客户端异常 5xx服务器异常
*/
SUCCESS("200", "成功"),
PARAMETER_ERROR("400", "参数异常"),
BAD_REQUEST("400", "无效的请求"),
ERROR("500", "异常错误"),
/*--------根据业务实际情况,可以自己定义返回的状态码-------*/
;
/**
* 返回状态码
*/
private String code;
/**
* 返回描述
*/
private String result;
RespBasicCode(String code, String result)
this.code = code;
this.result = result;
public String getCode()
return code;
public String getResult()
return result;
/**
* 通过code 获取RespBasicCode对象
*
* @param code 状态码
* @return RespBasicCode对象
*/
public static RespBasicCode getRespBasicCodeByCode(String code)
if (code == null || "".equals(code))
return null;
for (RespBasicCode respBasicCode : RespBasicCode.values())
if (respBasicCode.getCode().equals(code))
return respBasicCode;
return null;
/**
* 通过code 获取resultDes
*
* @param code 状态码
* @return resultDes
*/
public static String getResultDesByCode(String code)
if (code == null || "".equals(code))
return null;
for (RespBasicCode respBasicCode : RespBasicCode.values())
if (respBasicCode.getCode().equals(code))
return respBasicCode.getResult();
return null;
3 统一返回数据结构
/**
* description: 服务之间交互统一响应
* 返回划分为2部分:分别是头部和实体信息
* 头部返回状态为200,则从Body里面取数据
* 如果头部返回异常状态码,则从头部取出错误信息
*/
public class ActionResponse<T>
/**
* 返回的头部信息
*/
private Head head = new Head();
/**
* 返回主体信息
*/
private Body body = new Body();
/**
* 返回成功,没有data数据 结果:
*
* "head":
* "code": "200",
* "result": "成功"
* ,
* "body": null
*
*
* @param <T> Body中 data类型
* @return ActionResponse
*/
public static <T> ActionResponse<T> success()
return new ActionResponse<T>(RespBasicCode.SUCCESS.getCode(),RespBasicCode.SUCCESS.getResult(),null);
/**
* 返回成功,并且带有数据 结果:
*
* "head":
* "code": "200",
* "result": "成功"
* ,
* "body": [
* "你好 宇宙"
* ]
*
*
* @param data 数据
* @param <T> Body中 data类型
* @return ActionResponse
*/
public static <T> ActionResponse<T> success(T data)
return new ActionResponse<>(RespBasicCode.SUCCESS.getCode(),RespBasicCode.SUCCESS.getResult(), data);
/**
* 返回失败,自定义状态码,并且没有任何数据 结果:
*
* "head":
* "code": "400",
* "result": "参数异常"
* ,
* "body": null
*
*
* @param respCode 状态码对象
* @param <T> Body中 data类型
* @return ActionResponse
*/
public static <T> ActionResponse<T> fail(RespBasicCode respCode)
return new ActionResponse<>(respCode.getCode(),respCode.getResult(),null);
/**
* 返回失败,自定义状态码,并且封装数据 结果:
*
* "head":
* "code": "400",
* "result": "参数异常"
* ,
* "body": [
* "你好 宇宙"
* ]
*
*
* @param respCode respCode 状态码对象
* @param data 数据
* @param <T> Body中 data类型
* @return ActionResponse
*/
public static <T> ActionResponse<T> fail(RespBasicCode respCode, T data)
return new ActionResponse<>(respCode.getCode(), respCode.getResult(), data);
/**
* 自定义返回信息
*
* @param code head中的code
* @param result head中的result
* @param data body中的数据
* @param <T> Body中 data类型
* @return ActionResponse
*/
public static <T> ActionResponse<T> custom(String code,String result, T data)
return new ActionResponse<>(code,result,data);
/**
* 真正的数据源泉,所有方法均是调用这个构造器
*
* @param code head中的具体的状态码
* @param result head中的描述信息
*/
private ActionResponse(String code, String result, T data)
this.head.code = code;
this.head.result = result;
this.body.data = data;
public Head getHead()
return head;
public T getBody()
return body.getData();
/**
* 返回的实体信息
*/
private class Body
/**
* 数据域,如果是分页直接为PageResult即可
*/
private T data;
public T getData()
return data;
/**
* 响应的头部
*/
private class Head
/**
* 状态码
*/
private String code;
/**
* 结果描述
*/
private String result;
public String getCode()
return code;
public String getResult()
return result;
以上是关于Java 前后端 统一返回数据格式的主要内容,如果未能解决你的问题,请参考以下文章