前言:
在做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
}
以上运行结果用专门工具整理过格式