Web中Controller返回值的封装

前言:

在做web项目是,controller返回值总是不知道怎么写好,于是就是需要啥返回啥,在前端处理上就不太灵活,最近看一些项目,发现了巧妙的解决方法,可能大多数企业和公司也是这么做的

无论什么请求都返回JSON,也就是一个对象转化为json,则个对象中封装一些常用属性,比如状态码status,msg(代表失败或者成功信息),最后是一个泛型的Data,请求的数据都放在这里

封装类

package util;

/**
 * 返回值工具类
 *
 * @author rambler
 * @since 2019年7月2日 18:10:14
 */
public class Response<T> {
    // 状态码,成功为0,失败为1,也封装成常量类
    private Integer status;
    // 消息,成功消息或者失败消息
    private String msg;
    // 要返回的数据
    private T data;

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    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;
    }

    private Response(Integer status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    private Response(Integer status, String msg, T data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 状态码 + 成功提示信息
     */
    public static <T> Response<T> createResponseBySuccess(String msg) {
        return new Response<>(ConstUtils.ResponseCode.SUCCESS, msg);
    }

    /**
     * 状态码 + 成功提示信息 + 数据
     */
    public static <T> Response<T> createResponseBySuccess(String msg, T data) {
        return new Response<>(ConstUtils.ResponseCode.SUCCESS, msg, data);
    }

    /**
     * 状态码 + 错误信息
     */
    public static <T> Response<T> createResponseByError(String msg) {
        return new Response<>(ConstUtils.ResponseCode.ERROR, msg);
    }
}

使用起来也很方便,比如你在用户模块,登录成功以后需要异步加载用户信息,就可以在控制层返回Response<User>,将用户信息放在Response中,前端js通过解析json字符串来获取有效信息,并完成前端效果

以前在做的时候可能,登录就是登录,登录是直接提交表单,然后在重新跳转页面,在window.ready()方法中在请求用户信息,在完成相关操作,很麻烦,在比如分页数据,直接将分页数据放到Response中,然后返回即可,前端根据根据返回的json串,动态生成页码等等操作

这里是根据前面发的一篇关于分页的文章,这里拿之前的代码做测试,就是测试分页数据

为了模拟真实效果,通过fastjson将对象转化为json字符串(可以点击这里下载)

import bean.User;
import com.alibaba.fastjson.JSON;
import util.DBUtil;
import util.PageBean;
import util.Response;

public class Main {
    public static void main(String[] args) {
        //分页工具类(上一篇博客封装的)
        PageBean<User> pageBean = new PageBean<>(3, 5, 32);
        //获得分页数据
        pageBean.setData(DBUtil.getUserList(pageBean.getStartIndex(), pageBean.getPageSize()));
        通过fastjson将对象转化为json字符串
        String result = JSON.toJSONString(Response.createResponseBySuccess("访问成功", pageBean));
        System.out.println(result);
    }
}

运行结果:

{
    "data": {
        "currentPage": 3,
        "data": [{
            "password": "554",
            "username": "荔枝"
        }, {
            "password": "987",
            "username": "西瓜"
        }, {
            "password": "546",
            "username": "风扇"
        }],
        "nextPage": 4,
        "pageSize": 5,
        "previousPage": 2,
        "startIndex": 10,
        "totalPage": 7,
        "totalRecord": 32
    },
    "msg": "访问成功",
    "status": 0
}

以上运行结果用专门工具整理过格式 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值