Java通用接口响应封装类

本文介绍了Java接口响应封装的重要性,通常包括HTTP状态值、状态消息和实际数据。提供了状态枚举、数据响应基类和具体响应数据体的示例,以满足日常开发需求。并提及CodeEnum枚举类在业务异常处理中的应用,结合Spring MVC的@ControllerAdvice进行统一异常响应。

Java接口响应封装类

Web开发中,前后分离是个趋势,现在大部分公司研发部门已经在走前后分离的路子了,前后分离开发各司其职能够有效的提高工作效率和开发质量。

REST接口会返回各种各样的数据,如果对接口的格式不加约束,很容易造成混乱。

在实际项目中,一般会把结果放在一个封装类中,封装类中包含http状态值,状态消息,以及实际的数据。

个人总结一下工作中用到的接口响应类。😃

  • 状态枚举,接口响应状态码、消息,统一在此枚举类中定义,方便阅读、修改。
/**
 * 响应状态码枚举
 * @author liuyang
 * 2020-01-13
 */
public enum CodeEnum {

    SUCCESS(0, "成功"),
    FAIL(1, "失败"),
    ;

    private final Integer code;

    private final String msg;
  // 省略枚举构造方法、get、set方法
}
  • 数据响应基类,方便以后扩展子类,也可用于增、删、改相关接口响应。
/**
 * 响应数据基类
 * @author liuyang
 * 2020-01-13
 */
public class BaseResponse {

    /**
     * 状态码
     */
    private Integer code;

    /**
     * 响应消息
     */
    private String msg;

    protected BaseResponse() {}

    protected BaseResponse(CodeEnum code) {
        this.code = code.getCode();
        this.msg = code.getMsg();
    }
  // 省略get/set方法
}
  • 响应数据体,继承自 BaseResponse 类,增加了 范型 属性,方便响应各种数据。
/**
 * 响应数据体
 * @author liuyang
 * 2020-01-13
 */
public class ResponseData<T> extends BaseResponse {

    /**
     * 数据
     */
    private T data;

    private ResponseData(CodeEnum code) {
        super(code);
    }

    private ResponseData(CodeEnum code, T data) {
        super(code);
        this.data = data;
    }

    /**
     * 对外开放基础响应体已供调用,可用于增、删、改接口操作
     */
    public static BaseResponse out(CodeEnum code) {
        return new BaseResponse(code);
    }

    /**
     * 对外开放数据响应体已供调用,可用于查询数据实用,引用了范型设计,支持各种数据类型
     */
    public static <T> ResponseData<T> out(CodeEnum code, T data) {
        return new ResponseData<>(code, data);
    }
  // 省略get/set方法
}

以上三个类足可以满足日常开发,顺带说一句,CodeEnum枚举类也可用于定义处于业务异常逻辑,比如:抛出用户不存在的异常,然后配合Spring MVC的 @ControllerAdvice注解,统一响应异常信息。(如果不明白,可在评论区说明,可以考虑再出一篇针对异常处理的文章)

进入测试------------------------

  • 基础响应,此处模拟删除
@GetMapping("/user/del/{userId}")
public BaseResponse delUser(@PathVariable Integer userId) {
	return ResponseData.out(CodeEnum.FAIL);
}

访问:localhost:8080/user/del/1

响应:

{
    "code": 1,
    "msg": "失败"
}
  • 数据体响应,此处模拟用户列表
@GetMapping("/user-info")
public ResponseData<List<String>> userInfo() {
  List<String> list = new ArrayList<>();
  list.add(UUID.randomUUID().toString());
  list.add(UUID.randomUUID().toString());
  list.add(UUID.randomUUID().toString());
  list.add(UUID.randomUUID().toString());
  return ResponseData.out(CodeEnum.SUCCESS, list);
}

访问:localhost:8080/user-info

响应:

{
    "code": 0,
    "msg": "成功",
    "data": [
        "003252cf-3361-43c4-8fdc-b9091f83ea05",
        "6320cd96-ae04-4885-ac78-76241f19ac95",
        "34cdd394-97d4-4e7d-993f-e4688b86d0e0",
        "bd293a9e-465b-4796-b8fa-17fc37de9bf7"
    ]
}

以上,测试成功。

PS:可在此基础上加入一些符合自己需要的属性,比如:响应时间戳、响应标识等等…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值