Java 服务器项目风格推荐 - 统一响应格式

本贴最后更新于 2117 天前,其中的信息可能已经时异事殊

1.统一响应格式的作用

一方面,让自己的后台代码看起来更加整洁,另一方面,对其他端的对接也比较方便。有时候,你可能也会需要打印一下返回值,统一的响应格式让你也比较好查找问题。

2.定义

通常把统一响应格式定义为一个类,我一般定义为 Result,由于返回值类型的不确定性,实现方式也有多种,可以是 Object,可以用泛型,也可以实现 Map 接口,我的方式是 Object。

@Data public class Result { private Integer code; private String message; private Object data; public Result(){} public Result(int code, String msg) { this.setCode(code); this.setMessage(msg); } public Result(ResponseStatus carStatus) { this.setCode(carStatus.getCode()); this.setMessage(carStatus.getMsg()); } public Result(int code, String msg, Object data) { this.setCode(code); this.setMessage(msg); this.setData(data); } public Result(ResponseStatus carStatus, Object data) { this.setCode(carStatus.getCode()); this.setMessage(carStatus.getMsg()); this.setData(data); } public static Result of(int code, String msg){ return new Result(code,msg); } public static Result of(ResponseStatus status){ return new Result(status); } public static Result of(int status, String msg, Object data){ return new Result(status,msg, data); } public static Result of(ResponseStatus carStatus, Object data){ return new Result(carStatus, data); } public static Result ok(){ return Result.of(ResponseStatus.OK); } public static Result ok(Object data){ return Result.of(ResponseStatus.OK, data); } public static Result error(){ return Result.of(ResponseStatus.INTERNAL_SERVER_ERROR); } public static Result error(String msg){ return Result.of(ResponseStatus.INTERNAL_SERVER_ERROR.getCode(),msg); } public static Result badRequest(){ return Result.of(ResponseStatus.BAD_REQUEST); } public static Result badRequest(String msg){ return Result.of(ResponseStatus.BAD_REQUEST.getCode(),msg); } }

一些常用的返回可以定义成枚举类型

public enum ResponseStatus { OK(200,"操作成功"), BAD_REQUEST(401,"请求无效"), INTERNAL_SERVER_ERROR(500,"服务异常"); private int code; private String msg; ResponseStatus(int code, String msg) { this.code = code; this.msg = msg; } public int getCode() { return code; } public String getMsg() { return msg; } }

3.使用

在写请求接口的时候,可以直接将 Result 作为返回值。

@GetMapping("list") @ResponseBody public Result list(@RequestParam Map<String, Object> params){ return Result.ok(service.list(params)); }

响应结果为:

{ "code": 1, "message": "操作成功", "data": [] }

以上就是我自己对统一响应格式的理解,若有不合适的地方,欢迎交流

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖 • 2 关注
  • 响应
    1 引用 • 4 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250 1 赞同

    感谢分享,我稍微提点建议:Code 不建议和 HTTP Status Code 有对应关系,这样容易产生误解。

    1. 一般用 0 表示成功状态,非 0 表示失败,然后根据具体业务进行细分
    2. 客户端处理响应时应该先校验 HTTP 状态码是否为 200,然后再根据具体 Code 处理业务结果
  • someone
    作者

    谢谢,我用的是 1 作为响应成功的标识,这里只是为了说明 code 的意义,专门改成了 http 的响应码

  • ZephyrJung via macOS

    我有个建议就是 Object 用泛型替代

  • someone
    作者

    谢谢,主要是为了适配公司定义的响应结果