SpringBoot封装Web返回对象

301 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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;
    }
}

由于使用到了Apachehttpcomponents库里面的HttpStatus类,所以我们也要在pom.xml中引入一下依赖。

<dependency>
	<groupId>org.apache.httpcomponents</groupId>
	<artifactId>httpcore</artifactId>
	<version>4.4.13</version>
</dependency>