接口返回统一数据格式

小灰灰 2022-11-13 13:26 317阅读 0赞

前端与后端服务分离时,后端服务常常需要定义统一的数据格式

以下面的json格式为例

  1. {
  2. "code": 1,
  3. "msg": "成功",
  4. "data": [
  5. {
  6. "id": null,
  7. "nickname": "小明",
  8. "sex": null
  9. },
  10. {
  11. "id": null,
  12. "nickname": "小红",
  13. "sex": null
  14. }
  15. ]
  16. }

code:请求状态
msg: 请求状态描述
data:具体业务数据,用泛型

一、首先创建请求状态枚举,用于返回数据中的code

  1. public enum ResultCodeEnum {
  2. /** * 否;禁用 */
  3. NO(0, "失败"),
  4. /** * 是;启用 */
  5. YES(1, "成功"),
  6. ;
  7. ResultCodeEnum(Integer status, String desc) {
  8. this.status = status;
  9. this.desc = desc;
  10. }
  11. private Integer status;
  12. private String desc;
  13. public Integer getStatus() {
  14. return status;
  15. }
  16. public String getDesc() {
  17. return desc;
  18. }
  19. }

二、统一数据返回类,使用泛型T,处理不同的具体业务

  1. package com.pd.shop.common;
  2. import com.pd.shop.enums.ResultCodeEnum;
  3. import lombok.Data;
  4. @Data
  5. public class Result<T> {
  6. private Integer code;
  7. private String msg;
  8. private T Data;
  9. public Result() {
  10. }
  11. Result(ResultCodeEnum codeEnum) {
  12. this.code = codeEnum.getStatus();
  13. this.msg = codeEnum.getDesc();
  14. }
  15. Result(ResultCodeEnum codeEnum, T t) {
  16. this.code = codeEnum.getStatus();
  17. this.msg = codeEnum.getDesc();
  18. this.Data = t;
  19. }
  20. public Result success() {
  21. return new Result(ResultCodeEnum.YES);
  22. }
  23. public Result fail() {
  24. return new Result(ResultCodeEnum.NO);
  25. }
  26. public static <T> Result<T> success(T t) {
  27. return new Result(ResultCodeEnum.YES, t);
  28. }
  29. public static <T> Result<T> fail(T t) {
  30. return new Result(ResultCodeEnum.NO, t);
  31. }
  32. }

三、创建基类Controller, Controller层继承BaseController, 方便Controller层封装响应结果

  1. package com.pd.shop.controller;
  2. import com.pd.shop.common.Result;
  3. public class BaseController {
  4. public Result success(){
  5. return new Result().success();
  6. }
  7. public Result fail(){
  8. return new Result().fail();
  9. }
  10. public <T> Result<T> success(T data){
  11. return Result.success(data);
  12. }
  13. public static <T> Result<T> fail(T data){
  14. return Result.fail(data);
  15. }
  16. }

四、Controller层调用统一响应结果json

说明:@RestController中包含@ResponseBody, @ResponseBody会将对象转为json返回给前端页面

  1. package com.pd.shop.controller;
  2. import com.pd.shop.common.Result;
  3. import com.pd.shop.model.entity.UserInfo;
  4. import org.springframework.web.bind.annotation.GetMapping;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. @RestController
  10. @RequestMapping("/v1/testApi")
  11. public class TestApiController extends BaseController{
  12. @GetMapping("/success1")
  13. public Result<String> success1(){
  14. return success("dsdasaas");
  15. }
  16. @GetMapping("/success2")
  17. public Result success2(){
  18. return success();
  19. }
  20. @GetMapping("/success3")
  21. public Result<List<UserInfo>> success3(){
  22. List<UserInfo> list = new ArrayList<>();
  23. UserInfo userInfo = new UserInfo();
  24. userInfo.setNickname("小明");
  25. list.add(userInfo);
  26. UserInfo userInfo1 = new UserInfo();
  27. userInfo1.setNickname("小红");
  28. list.add(userInfo1);
  29. return success(list);
  30. }
  31. @GetMapping("/fail1")
  32. public Result fail1(){
  33. return fail();
  34. }
  35. @GetMapping("/fail2")
  36. public Result<List<UserInfo>> fail2(){
  37. List<UserInfo> list = new ArrayList<>();
  38. UserInfo userInfo = new UserInfo();
  39. userInfo.setNickname("小明");
  40. list.add(userInfo);
  41. UserInfo userInfo1 = new UserInfo();
  42. userInfo1.setNickname("小红");
  43. list.add(userInfo1);
  44. return fail(list);
  45. }
  46. }

发表评论

表情:
评论列表 (有 0 条评论,317人围观)

还没有评论,来说两句吧...

相关阅读

    相关 统一json返回格式

    springmvc控制器接受到一个用户登录的请求, 要判断用户名密码是否为空, 还要去数据库检查密码是否正确。 然后以json的格式返回到前台, 前台再根据状态码来判断是允许登