Fork me on GitHub

简单总结下服务器响应类的封装

前言

还记得之前做个小应用的时候需要返回json数据给前台。那时候只需要判断验证是否成功,如果不成功就返回message消息。并没有虑到返回数据,数据则是存入相应的域之中。随着做的业务复杂上升,接触的东西多了之后,那么我们所做的项目就需要前后台分离,或者所使用的接口当中都需要返回相应的状态、消息、数据。

如何实际一个高可用的服务器响应类呢?今天就来总结下我是用过的一些服务器响应类吧。

演变

开始的开始

最开始如何写一个服务器响应类呢?请求返回数据给前台ajax调用验证使用。

最直接的想法是一个状态status该请求需要验证的内容是否正确(成功),message根据状态返回相应的提示性描述语句。

这是最开始我做东西时候最直观的想法吧,可能你会说到如果需要返回数据呢?我的回答是没有,数据都是放入requestScope当中,返回modelAndView。现就开看看这个代码吧。

创建一个类作为响应对象,就叫做ExecuteResult

1
2
3
4
5
6
7
8
9
10
/**
* @author : ChenCong
* @date : Created in 21:11 2018/1/13
*/
public class ExecuteResult {

private Boolean status;
private String message;

}

有点简陋,但是可以避免在代码当中重复写 String result = " " 等内容。就算做是一种进步吧,现在看看如何使用呢。

1
2
3
4
5
6
7
8
9
10
11
12
@RequestMapping("/deleteUser") 
@ResponseBody
public ExecuteResult deleteUser(String id){
UserInfo user = this.userInfoService.get(id);
user.setState(Conts.STATE_DELETE);
this.userInfoService.update(user);

ExecuteResult result = new ExecuteResult();
result.setMessage("删除成功");
result.setStatus(true);
return result;
}

这里是一个删除用户的的方法,只是将用户状态修改,然后返回一个封装了的ExecuteResult告诉前台ajax调用,得到json数据中statustrueMessage删除成功

进步,能够返回数据

但是上面有问题,如果我们需要返回数据怎么办呢?最简单方法是在ExecuteResult这个封装类当中添加一个属性T data作为一个泛型返回,使用的时候后封装一个VO将需要返回的属性或者对象放入其中,然后将这个VO对象最为ExecuteResult中的属性T data进行返回。

那么上面的ExecuteResult就成了这样的了。

1
2
3
4
5
6
7
8
9
10
11
12
/**
* @author : ChenCong
* @date : Created in 21:11 2018/1/13
*/
public class ExecuteResult<T> {

private Boolean status;
private String message;

private T data;

}

使用时候直接返回所需要的VO对象(dto)就行了。(dto是展示层和服务层之间传输数据的对象,对于绝大部分应用场景而言dtovo属性一致,也就是pojo,这是实现层面的思想,对于设计层面而言,它们又担负着不同的角色).

通用,再次封装

绝大部分场景我们能够上面那样,但是statusmessage容易写成硬编码,如何对status和message进行封装呢,针对于不同的服务器状态返回不同的描述性语言,同时服务器还能够返回不同的数据。

联系

聪聪的独立博客 ,一个喜欢技术,喜欢钻研的95后。如果你看到这篇文章,千里之外,我在等你联系。

坚持原创技术分享,您的支持将鼓励我继续创作!