封装springboot接口响应

作者: JonSo | 来源:发表于2021-08-17 19:20 被阅读0次

封装springboot接口响应

有过前后端分类开发的朋友们,会接触到统一接口返回标准,
比如访问如下接口:

https://test.2021.08.11.facecto.com/testapi
注意本接口是杜撰的,不存在。

返回的如下:

{
    "data": {
        "id": 1,
        "name": "JonSo",
        "url": "https://facecto.com"
    },
    "code": 0,
    "message": "OK",
    "status": "SUCCESS"
}

对于大牛来说,so easy,对于刚玩不久的伙伴们应该略有疑问。
本篇文章摊开说说如何实现这种效果。

从看的见的地方入手

从标准返回接口的json数据可以猜测到,数据是被封装在某个result中了。
很聪明,这个返回结果就是一个CodeResult,咱们先推测下,应该是这个样子:

CodeResult

public class CodeResult<T> {
    private T data;
    private Integer code;
    private String message;
    private String status;
}

对的,它就长这样。这里咱们用了泛型。
当然它还不能工作:1、需要可系列化,2、需要可实例化、并且封装下状态码。我们一睹红颜:

public class CodeResult<T> implements Serializable {
    private static final long serialVersionUID = 6374486752803150412L;
    private T data;
    private Integer code;
    private String message;
    private ResultStatus status;

    public CodeResult() {
        this.code = 0;
        this.message = ResultMessage.SYSTEM_OK.getValue();
        this.status = ResultStatus.SUCCESS;
    }

    private CodeResult(Integer code, String message, ResultStatus status) {
        this.code = code;
        this.message = message;
        this.status = status;
    }

    private CodeResult(Integer code, String message, ResultStatus status, T data) {
        this.code = code;
        this.message = message;
        this.status = status;
        this.data = data;
    }

    public static <T> CodeResult<T> error() {
        return new CodeResult(HttpStatus.SC_INTERNAL_SERVER_ERROR, ResultMessage.SYSTEM_ERROR.getValue(), ResultStatus.FAIL);
    }

    public static <T> CodeResult<T> error(String message) {
        return new CodeResult(HttpStatus.SC_INTERNAL_SERVER_ERROR, message, ResultStatus.FAIL);
    }

    public static <T> CodeResult<T> error(int code, String message) {
        return new CodeResult(code, message, ResultStatus.FAIL);
    }

    public static <T> CodeResult<T> ok() {
        return new CodeResult();
    }

    public static <T> CodeResult<T> ok(String message) {
        return new CodeResult(0, message, ResultStatus.SUCCESS);
    }

    public static <T> CodeResult<T> ok(String message, T data) {
        return new CodeResult(0, message, ResultStatus.SUCCESS, data);
    }

    public static <T> CodeResult<T> okx(T data) {
        return new CodeResult(0, ResultMessage.SYSTEM_SUCCESS.getValue(), ResultStatus.SUCCESS, data);
    }

}

基本上这个方法已经能工作了。
ResultStatus是个枚举。

public enum ResultStatus {
    SUCCESS(0),
    FAIL(1);
    private int code;

    ResultStatus(int code) {
        this.code = code;
    }

    public int getCode() {
        return this.code;
    }

    public String getName() {
        return this.name();
    }
}

怎么使用

新建一个Controller

@RestController
public class UserController {
    @GetMapping(value = "/")
    public CodeResult getUser(){
        User u = new User().setUrl("https://facecto.com").setId(1).setName("JonSo");
        return CodeResult.ok("OK", u);
    }
}

再访问看看,是不是很简单,已经是格式化的json展示了。

不想动手copy怎么办?

不用担心,进来看文章了,自然不会太失望。我已经封装好了以上的代码放到中央仓上去了,只要

Maven引用

<dependency>
  <groupId>com.facecto.code</groupId>
  <artifactId>facecto-code-base-starter</artifactId>
  <version>1.0.2</version>
</dependency>

便可以略过前面的内容,直接写RestController使用了。
方便吧。
原文地址:https://www.facecto.com/archives/790.html

相关文章

网友评论

    本文标题:封装springboot接口响应

    本文链接:https://www.haomeiwen.com/subject/zrrvbltx.html