接口的统一数据返回设计与实现

一、前言

在前端请求后端中,需要经常与后端进行交互,如果后端接口返回格式不统一,则会造成前端解析返回很麻烦,一旦数据发生变化,改动很大,要付出的代价很大。定义一个统一处理,可以简化上述问题。

二、代码

这个统一返回接口,是我以前参看慕课网的一个教程后经过实践后改造的。这种统一返回接口在没有数据要返回给前端时,只需要返回信息码和提示信息即可。当有数据返回给前端展示时,可以将信息码和返回数据统一返回,然而只需要定义一个类,不需要根据对象的不同去写不同的返回,这主要得益于泛型。有关泛型的简单介绍,正好昨天写了关于泛型的笔记。泛型笔记
1)Result类

package com.zlc.pojo;

/**
  * @param <T>
  * @Name:Result
  * @Description:封装统一返回结果类
  * @Author: 追到乌云的尽头找太阳(Jacob)
  * @Version: V1.00 (版本号)
  * @Create Date: 2017年5月1日上午10:29:36
  * @Parameters: 
  * @Return: 
  */
public class Result<T> {
	
    private Integer code;  // 信息码
   
    private  String msg;   // 提示信息
    
    private  String url;   // 请求路径
    
    private T data;        // 数据内容

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
    public String getUrl() {
		return url;
	}
    public void setUrl(String url) {
		this.url = url;
	}

	@Override
	public String toString() {
		return "Result [code=" + code + ", msg=" + msg + ", url=" + url
				+ ", data=" + data + "]";
	}
}

2)ResultUtil类

package com.zlc.util;

import com.zlc.pojo.Result;

/**
 * @param :
 * @Author : 追到乌云的尽头找太阳(Jacob)
 * @Description : 数据统一返回结构工具
 * @Date :create in 11:10 2017/3/22
 */
 @SuppressWarnings({ "rawtypes", "unchecked" } )
public class ResultUtil {

	public static Result success(Object object){
        Result result = new Result();
        result.setCode(0);
        result.setMsg("成功");
        result.setData(object);
        return  result;
    }

	public static Result success(){
        return success(null);
    }

	public  static  Result error(Integer code, String msg){
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return  result;
    }
}

3)返回结构枚举类ResultEnum

package com.zlc.enumeration;


/**
	 * @Name:ResultEnum
	 * @Description: 用于统一返回结果的枚举类
	 * @Author: 追到乌云的尽头找太阳(Jacob)
     * @Version: V1.00 (版本号)
	 * @Create Date: 2017年5月1日上午10:50:25
	 * @Parameters: 
	 * @Return: 
	 */
public enum ResultEnum {
	
	    UNKONW_ERROR(-1,"未知的错误"),
	    SUCCESS(0,"成功"),
	    FAIL(1,"失败"),
	    EXIST(2,"存在"),
	    NOTEXIST(3,"不存在"),
	    NAMEILLEGOL(10,"姓名不合法"),
	    PHONEILLEGOL(11,"电话号码不合法"),
	    QQEILLEGOL(12,"QQ号码不合法"),
	    SEXEILLEGOL(13,"性别不合法"),
	    PRIMARY_SCHOOL(100,"你可能在上小学"),
	    MIDDLE_SCHOOL(101,"你可能在上初中"),
	    ;

	    private Integer code;

	    private String msg;

	    ResultEnum(Integer code, String msg) {
	        this.code = code;
	        this.msg = msg;
	    }

	    public Integer getCode() {
	        return code;
	    }

	    public String getMsg() {
	        return msg;
	    }

}

这个枚举类里面预定义的应该是大面,我上面的只是举例。
4)无返回数据的统一返回示例

    @SuppressWarnings("unchecked")
	@GetMapping(value="/test")
	public Result<String> test(){
	    // 一些逻辑判断  if()...else....
	    // 如果成功,返回
	    return ResultUtil.success();
	    // 如果失败,返回,可以直接输入返回码和提示信息,也可以使用枚举类中预定义的
	    return ResultUtil.error(1,"你没有权限");
	}

5)有返回数据的统一返回示例

    @SuppressWarnings("unchecked")
	@PostMapping(value="/testData/{id}")
	public Result<Student> test(@PathVariable Integere id){
	    // 比如说根据id拿到某个学生的个人信息,
	    //当然也可以根据id获取教师信息,这时将Result<Student>改为Result<Teachere>
	    // 如果成功,返回
	    Student queryStudent = studentService.findById(id);
	    if(null != queryStudent){
	       return ResultUtil.success(queryStudent);
	    }else {
	       return ResultUtil.error(1,"抱歉,没有该学生哦");
	    }
	}

三、说明
上述代码只是简单的示例,其实一般简单的返回中是没有问题的,但是如果说要返回那种类似报文的数据格式,就是说有报文头(因为可能含有权限信息)和报文体(含有 数据)这个时候,上面的代码需要大改,但是基本思路是一样的,需要根据具体去修改。
缺点2就是返回中没有给个时间戳,这个好改,直接在Result类中,添加一个字段即可,然后在ResultUtil的success和error方法中设置LocalDateTime即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵喵@香菜

感谢观众老爷送的一发火箭!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值