SpringBoot 统一请求返回的实现
目前我们的返回是直接把实体类扔给请求方,这样很不友好,一方面没有统一的格式,二来请求方不知道请求成功与否,没有一个可以判断的东西,也没有说明性的返回。
本篇就来为所有接口提供一个统一的友好返回。
确定返回结构
首先,我们先确定好我们接口返回的格式是什么样的,然后再一步一步实现下面的。
{ "code":200, "msg":"ok", "data":"" }
- code字段表示状态码,调用方根据该码来作为后续逻辑的依据,比如code值为200表示操作成功,没有逻辑错误,此时可以提示用户操作成功等;code值不为200表示操作失败,比如为1001,表示用户名已存在,此时前端做一些相应操作。
- msg字段用来充当额外说明,比如上面说的状态为1001,这里的msg就可以是usernameexists这样的说明性文字,帮助调用方更好的理解。
- data字段一般是在code值为200的时候,返回具体的业务数据,可以是数组,也可以是对象。
创建返回码
根据上面定的返回结构,我们可以把code和msg字段用枚举类型整合,在项目中创建common目录,新建ApiCode.java如下代码所示:
packagecom.foxescap.wxbox.common; /** *全局接口状态码 *@authorxfly */ publicenumApiCode{ /** *通用成功 */ API_OK(200,"ok"), /** *用户名已存在 */ API_USERNAME_EXIST(1001,"usernameexists"); privatefinalintcode; privatefinalStringmsg; ApiCode(intcode,Stringmsg){ this.code=code; this.msg=msg; } publicintcode(){ returnthis.code; } publicStringgetMsg(){ returnthis.msg; } }
之后每有一个不同的错误代码都需要在这里加上,然后调用这里的枚举变量。可能会有点繁琐,但当项目逐渐大起来以后,这样做就能很好的管理状态码。
创建返回类
在项目中创建common目录,新建HttpResponse.java文件:
packagecom.foxescap.wxbox.common; importcom.fasterxml.jackson.annotation.JsonPropertyOrder; importlombok.AllArgsConstructor; importlombok.Data; importjava.io.Serializable; /** *@authorxfly *@param*/ @Data @AllArgsConstructor @JsonPropertyOrder({"code","msg","data"}) publicclassApiResponse implementsSerializable{ privatestaticfinallongserialVersionUID=1L; /** *自定义返回码 */ privateintcode; /** *自定义返回说明 */ privateStringmsg; /** *返回数据 */ privateTdata; /** *成功返回,无数据 * *@return自定义的ApiResponse对象 */ publicstaticApiResponse
使用返回类
我们修改一下Controller里面的接口返回,现在不是直接返回实体类了,而是封装成我们的返回类,再返回给调用方:
@GetMapping("/user/{username}") publicApiResponsefindUserByUsername(@PathVariable(name="username")Stringusername){ returnApiResponse.success(userService.findByUsername(username)); }
到此这篇关于SpringBoot统一请求返回的实现的文章就介绍到这了,更多相关SpringBoot统一请求返回内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!