设计RESTful API接口,实现统一格式返回
我们需要对我们之前的API接口的response做一个简单的封装,实现统一的格式返回。
- 首先我们创建一个统一状态码的类ResultCode,用来封装我们需要返回状态码的信息。通过这个状态码可以更好的应对我们业务异常,比如我们自定义的校验不通过,系统异常,权限不足之类的状态码。
package com.cc.cloud.dto;
public enum ResultCode {
SUCCESS(1, "成功"),
INTERNAL_SERVER_ERROR(500, "接口内部错误");
private Integer code;
private String message;
public Integer code() {
return this.code;
}
public String message() {
return this.message;
}
ResultCode(Integer code, String message) {
this.code = code;
this.message = message;
}
}
- 我们创建一个类ResponseResult,用来封装我们统一的response信息。其中code表示我们的状态码,message表示我们状态码对应的描述信息,result则是包装了我们的业务数据。这里还抽取了两个方法success()和failure(),方便我们快速创建成功和失败的统一响应格式。
package com.cc.cloud.dto;
import lombok.Data;
import lombok.ToString;
@Data
@ToString(callSuper = true)
public class ResponseResult<T> {
private Integer code;
private String message;
private T result;
private ResponseResult(ResultCode resultCode, T result) {
this.code = resultCode.code();
this.message = resultCode.message();
this.result = result;
}
public static <T> ResponseResult<T> success(T result) {
return new ResponseResult<>(ResultCode.SUCCESS, result);
}
public static <T> ResponseResult<T> failure(T result) {
return new ResponseResult<>(ResultCode.INTERNAL_SERVER_ERROR, result);
}
}
- 改装我们的Controller,将我们的response信息用ResponseResult进行包装。
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public ResponseResult addMember(@RequestBody Member member) {
return ResponseResult.success(memberService.addMember(member));
}
- 测试
当然我这里只是简单的进行了设计和封装,想了解更多的可以参考下面的链接。
参考
每天用SpringBoot ,还不懂RESTful API返回统一数据格式原理?
源代码
https://gitee.com/cckevincyh/spring-cloud-demo/tree/common-restful-api