对于“构建统一的消息响应模型”,相信各位小伙伴在开发项目的过程中多少都有所遇见过,要知道,一个糟糕的接口响应信息的规定,对于协作开发或者接口调用方的小伙伴而言将是一个小灾难,本文将介绍一种简洁的,可用于前后端接口交互以及服务与服务之间进行调用时的统一消息响应模型。
接着上一篇文章【SpringBoot系列(一):如何构建一个标准的Spring Boot项目的内容,本文我们将继续以所搭建的标准的、企业级的Spring Boot项目为奠基,介绍分享前后端接口交互、服务与服务之间接口交互时如何规定一个统一的、标准的接口响应模型。
其实,这个统一的接口消息响应模型也没有那么高大上,其实就是参考了HTTP协议的“响应模型”而设计的一款统一消息响应模型:状态码Code、状态码描述信息Msg、响应数据Data,其对应的源代码如下所示:
public class BaseResponse { private Integer code; private String msg; private T data; public BaseResponse(Integer code, String msg) { this.code = code; this.msg = msg; } public BaseResponse(StatusCode statusCode) { this.code = statusCode.getCode(); this.msg = statusCode.getMsg(); } public BaseResponse(Integer code, String msg, T data) { this.code = code; this.msg = msg; this.data = data;} //省去getter setter方法}
除此之外,众所周知,我们在前端对后端相应的接口发起请求时,一般会得到相应的响应状态码,比如大家比较熟悉的200(OK)、404(Not Found)、405(Method Not Allowed)、502(Bad Gateway)、401(Unauthorized)等等,关于其他的、详细的响应状态码列表,大家可以来此看个够:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
观察这些状态码,会发现其实就是由两个字段信息组成,即Code跟Msg,因此,为了开发的方便,我们定义了包含这两个字段的枚举类StatusCode,其源代码如下所示:
/** * 通用状态码 */public enum StatusCode { Success(0,"成功"), Fail(-1,"失败"), InvalidParams(201,"非法的参数!"), InvalidGrantType(202,"非法的授权类型"); private Integer code; private String msg; StatusCode(Integer code, String msg) { this.code = code; this.msg = msg; } //此处省略getter、setter方法}
BaseResponse跟StatusCode相应文件的存储位置如下图所示:
![22d04e0973ddb59bbd974082a18b9925.png](https://i-blog.csdnimg.cn/blog_migrate/6a8149d48e97b0fe9a71616ca2f08871.jpeg)
BaseResponse 加 StatusCode结合使用,可以说是风云合璧、天下无敌啊!在开发项目接口的功能方法时,如果是需要返回相应的数据列表而不是跳转页面的话,则可以采用BaseResponse作为通用的返回格式。下面就来举个栗子吧!
在server模块建立一个BaseController,然后开发两个请求对应的功能方法,如下所示:
/** * @Author:debug (SteadyJack) * @Date: 2019/8/24 16:07 **/@RestController@RequestMapping("base")public class BaseController { @Autowired private IBaseService baseService; /** * 获取基本的信息一 * @param name * @return */ @RequestMapping(value = "/info