前后端分离项目中,后端开发需要写接口来处理请求并返回响应数据,而为响应数据定义统一的返回格式有利于提高开发效率和沟通的成本,比如包括状态码、操作提示信息、数据等。这样前端在拿到状态码、以及提示信息就可以在前端提示用户,并在页面展示响应数据。
返回格式比如:
那么接下来就在SpringBoot项目中定义统一返回结果。
步骤:
- 定义响应状态码以及信息的枚举类
public enum ResponseCode {
/**
* 成功
*/
SUCCESS(200, "操作成功"),
/**
* 失败
*/
FAILURE(500, "操作失败");
/**
* 状 态 码
*/
@Getter
private final int code;
/**
* 携 带 消 息
*/
@Getter
private final String message;
/**
* 构 造 方 法
*/
ResponseCode(int code, String message) {
this.code = code;
this.message = message;
}
}
- 定义响应数据的实体类
@Data
public class ServerResponse<T> implements Serializable {
/**
* 状态码
*/
private int code;
/**
* 提示消息
*/
private String msg;
/**
* 返回数据
*/
private T data;
/**
* 返回数据集元素的个数
*/
private Integer total;
/**
* 成功操作,携带默认信息
*/
public static <T> ServerResponse<T> success() {
return success(ResponseCode.SUCCESS.getMessage());
}
/**
* 成功操作, 携带成功状态码、自定义消息、数据和数据集中元素个数
*/
public static <T> ServerResponse<T> success(String message, T data, Integer total) {
return success(ResponseCode.SUCCESS.getCode(), message, data, total);
}
/**
* 成功操作, 携带成功状态码、自定义消息、数据
*/
public static <T> ServerResponse<T> success(String message, T data) {
return success(ResponseCode.SUCCESS.getCode(), message, data, null);
}
/**
* 成功操作, 携带成功状态码、自定义消息
*/
public static <T> ServerResponse<T> success(String message) {
return success(message, null);
}
/**
* 成功操作, 携带成功状态码、默认消息、数据
*/
public static <T> ServerResponse<T> success(T data) {
return success(ResponseCode.SUCCESS.getMessage(), data);
}
/**
* 成功操作, 携带自定义成功状态码、自定义消息和数据
*/
public static <T> ServerResponse<T> success(int code, String message) {
return success(code, message, null, null);
}
/**
* 成功操作, 携带自定义状态码、消息、数据和数据集中元素个数
*/
public static <T> ServerResponse<T> success(int code, String message, T data, Integer total) {
ServerResponse<T> result = new ServerResponse<T>();
result.setCode(code);
result.setMsg(message);
result.setData(data);
result.setTotal(total);
return result;
}
/**
* 失败操作, 携带默认数据
*/
public static <T> ServerResponse<T> failure() {
return failure(ResponseCode.FAILURE.getMessage());
}
/**
* 失败操作, 携带失败状态码、自定义消息
*/
public static <T> ServerResponse<T> failure(String message) {
return failure(message, null);
}
/**
* 失败操作, 携带失败状态码、自定义消息、数据
*/
public static <T> ServerResponse<T> failure(String message, T data) {
return failure(ResponseCode.FAILURE.getCode(), message, data);
}
/**
* 失败操作, 携带自定义状态码、自定义消息
*/
public static <T> ServerResponse<T> failure(int code, String message) {
return failure(code, message, null);
}
/**
* 失败操作, 携带自定义状态码、消息、数据
*/
public static <T> ServerResponse<T> failure(int code, String message, T data) {
ServerResponse<T> result = new ServerResponse<T>();
result.setCode(code);
result.setMsg(message);
result.setData(data);
return result;
}
}
- 改造controller中方法的返回值
@ApiOperation("查询设备标签")
@GetMapping("listDeviceTag")
public ServerResponse listDeviceTag(String deviceUuid) {
DeviceTag deviceTag = new DeviceTag();
deviceTag.setDeviceUuid(deviceUuid);
List<DeviceTag> deviceTags = deviceTagService.listDeviceTag(deviceTag);
return ServerResponse.success("ok",deviceTags);
}
总结:这样就完成了定义统一的返回结果,这里我只是进行了简单的示范,开发中具体要求的状态码、返回消息等还需按照需求来定义。