返回
统一返回结果的格式
后端
2023-09-11 21:59:43
为什么要统一返回结果的格式?
目前我们做的项目大体都会是前后端分离的。为了使数据使用者(包括但不限于前端工程师)能够更好地处理返回结果,不至于为了处理各式各样的返回数据格式而抓狂,所以我们需要定义一个统一的返回结果格式,这也是一种约定俗成的东西。
大家平时肯定多多少少都用过一些开源的框架,它们在设计的时候通常都会内置统一的返回结果格式。例如 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;
}
}
通过这种方式,我们可以轻松地实现统一的返回结果格式,使我们的代码更加规范和易于维护。