目前我们的返回是直接把实体类扔给请求方,这样很不友好,一方面没有统一的格式,二来请求方不知道请求成功与否,没有一个可以判断的东西,也没有说明性的返回。
本篇就来为所有接口提供一个统一的友好返回。
确定返回结构
首先,我们先确定好我们接口返回的格式是什么样的,然后再一步一步实现下面的。
{ "code": 200, "msg": "ok", "data": "" }
创建返回码
根据上面定的返回结构,我们可以把 code 和 msg 字段用枚举类型整合,在项目中创建 common 目录,新建 ApiCode.java 如下代码所示:
package com.foxescap.wxbox.common; /** * 全局接口状态码 * @author xfly */ public enum ApiCode { /** * 通用成功 */ API_OK(200, "ok"), /** * 用户名已存在 */ API_USERNAME_EXIST(1001, "username exists"); private final int code; private final String msg; ApiCode(int code, String msg) { this.code = code; this.msg = msg; } public int code() { return this.code; } public String getMsg() { return this.msg; } }
之后每有一个不同的错误代码都需要在这里加上,然后调用这里的枚举变量。可能会有点繁琐,但当项目逐渐大起来以后,这样做就能很好的管理状态码。
创建返回类
在项目中创建 common 目录,新建 HttpResponse.java 文件:
package com.foxescap.wxbox.common; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import lombok.AllArgsConstructor; import lombok.Data; import java.io.Serializable; /** * @author xfly * @param <T> */ @Data @AllArgsConstructor @JsonPropertyOrder({"code", "msg", "data"}) public class ApiResponse<T> implements Serializable { private static final long serialVersionUID = 1L; /** * 自定义返回码 */ private int code; /** * 自定义返回说明 */ private String msg; /** * 返回数据 */ private T data; /** * 成功返回,无数据 * * @return 自定义的 ApiResponse 对象 */ public static ApiResponse<Object> success() { return new ApiResponse<>(ApiCode.API_OK.code(), ApiCode.API_OK.getMsg(), ""); } /** * 成功返回,有数据 * * @param object 返回数据 * @param <T> 返回数据类型 * @return 自定义的 ApiResponse 对象 */ public static <T> ApiResponse<T> success(T object) { return new ApiResponse<>(ApiCode.API_OK.code(), ApiCode.API_OK.getMsg(), object); } /** * 失败返回 * * @param apiCode 错误码 * @return 自定义的 ApiResponse 对象 */ public static ApiResponse<Object> fail(ApiCode apiCode) { return new ApiResponse<>(apiCode.code(), apiCode.getMsg(), ""); } }
使用返回类
我们修改一下 Controller 里面的接口返回,现在不是直接返回实体类了,而是封装成我们的返回类,再返回给调用方:
@GetMapping("/user/{username}") public ApiResponse<User> findUserByUsername(@PathVariable(name = "username") String username) { return ApiResponse.success(userService.findByUsername(username)); }
到此这篇关于SpringBoot 统一请求返回的实现的文章就介绍到这了,更多相关SpringBoot 统一请求返回内容请搜索呐喊教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持呐喊教程!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。