返回

统一返回结果的格式

后端

为什么要统一返回结果的格式?

目前我们做的项目大体都会是前后端分离的。为了使数据使用者(包括但不限于前端工程师)能够更好地处理返回结果,不至于为了处理各式各样的返回数据格式而抓狂,所以我们需要定义一个统一的返回结果格式,这也是一种约定俗成的东西。

大家平时肯定多多少少都用过一些开源的框架,它们在设计的时候通常都会内置统一的返回结果格式。例如 Spring Boot 就有 ResponseEntity,其可以处理各种各样的 HTTP 状态码,响应体也可以是各种各样的类型。

当然,我们也可以自己定义返回结果格式,这里给出一种通用的格式:

{
  "code": 200,
  "msg": "success",
  "data": {}
}

其中:

  • code 字段表示请求处理的结果代码,通常使用 HTTP 状态码。
  • msg 字段表示请求处理的结果信息。
  • data 字段表示请求处理的结果数据。

当然,你也可以根据自己的需要定义更复杂的格式,但一定要保证格式的一致性。

Spring Boot 中,我们可以使用 @RestControllerAdvice 注解来定义一个全局的异常处理器,它可以处理所有未捕获的异常,并返回统一的返回结果格式。

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ResponseEntity<Object> handleException(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ErrorResponse(ex.getMessage()));
    }

}

在上面的代码中,ErrorResponse 是一个自定义的错误响应类,它可以根据不同的异常类型返回不同的错误信息。

public class ErrorResponse {

    private String message;

    public ErrorResponse(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}

通过这种方式,我们可以轻松地实现统一的返回结果格式,使我们的代码更加规范和易于维护。