持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
为什么要封装Web返回对象
虽然Spring会将我们要返回的对象自动的转化成JSON返回给客户端,但是如果我们不制定好规范,将加大与前端工程师的沟通难度。所有的类都随意的返回给前端,接口文档都不是很方便去写,同时也降低了代码的可读性。
怎么封装返回类
我一般有两个思路,一个是使用泛型,一个使返回类继承HashMap,两种方法都还挺好用的。
泛型就比较简单明了定义好我们需要返回的几个属性,如:code,msg等属性,然后在使用时再决定要返回的数据类型。
继承HashMap的方法更加的简单粗暴,就是使用HashMap的特点,可以随意的往里面put键值对,当然类似于code,msg等属性,也是要事先定义好的,之后就可以使用HashMap的特性随意的扩展键值对。
要让我们可以链式的调用put,我们还需要重写put方法,让put每次都返回自身,代码如下:
public R put(String key, Object value) {
super.put(key, value);
return this;
}
示例代码
示例代码使用的是HashMap的方式去做的统一返回,泛型的方法也比较简单,这里就不重复去贴代码了。
public class R extends HashMap<String, Object> {
public R() {
put("code", HttpStatus.SC_OK);
put("msg", "success");
}
public static R error() {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
}
public static R error(String msg) {
return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
}
public static R error(int code, String msg) {
R r = new R();
r.put("code", code);
r.put("msg", msg);
return r;
}
public static R ok(String msg) {
R r = new R();
r.put("msg", msg);
return r;
}
public static R ok(Map<String, Object> map) {
R r = new R();
r.putAll(map);
return r;
}
public static R ok() {
return new R();
}
public R put(String key, Object value) {
super.put(key, value);
return this;
}
}
由于使用到了Apache的httpcomponents库里面的HttpStatus类,所以我们也要在pom.xml中引入一下依赖。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.13</version>
</dependency>