介绍
为什么要做通用返回对象?
后端直接返回一个对象给前端,如果这个数据出问题了、后端处理报错了、查不到用户,前端如果不刻意区分的话,也不知道它到底为什么报错。比如说一个测试,它返回了一个有六项的列表,假如后台返回一个空数组,前端可能也不会意识到它是错误的,如果说后台因为一些异常,我们强制给他返回空数组,但前端可能不知道对不对,他还以为这个只是一个本来就是数据库里没有用户的一个值。
所以我们需要定义一个通用的返回对象。
通用返回类
通用返回类一般会定义各种返回状态,一般的通用返回类都至少要有返回状态码(code),返回数据(data),状态码信息(message)这三个属性,其他属性可以根据自己需求去定义。
package com.liqi.usercenters.common;
import lombok.Data;
import java.io.Serializable;
/**
* 通用返回类
* @param <T>
*/
@Data
public class BaseResponse<T> implements Serializable {
/**
* 状态码
*/
private int code;
/**
* 数据
*/
private T data;
/**
* 状态码信息
*/
private String message;
/**
* 状态码描述(详情)
*/
private String description;
public BaseResponse(int code, T data, String message,String description) {
this.code = code;
this.data = data;
this.message = message;
this.description = description;
}
public BaseResponse(int code, T data, String message){
this(code, data,message,"");
}
public BaseResponse(int code, T data){
this(code, data, "", "");
}
public BaseResponse(ErrorCode errorCode){
this(errorCode.getCode(),null, errorCode.getMessage(), errorCode.getDescription());
}
}
调用
通用返回类定义好了,那么怎么使用呢?其实很简单,看看下面的例子吧~
@PostMapping("/login")
public BaseResponse<User> userLogin(@RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) {
if (userLoginRequest == null) {
throw new BusinessException(ErrorCode.NULL_ERROR);
}
String userAccount = userLoginRequest.getUserAccount();
String userPassword = userLoginRequest.getUserPassword();
log.info(userAccount);
log.info(userPassword);
if (StringUtils.isAnyBlank(userAccount, userPassword)) {
throw new BusinessException(ErrorCode.PARAMS_ERROR);
}
User user = userService.userLogin(userAccount, userPassword, request);
if (user == null) {
return ResultUtil.error(ErrorCode.PARAMS_ERROR);
}
return ResultUtil.success(user);
}
总结:我们只需要将接口的返回类型从原来的User修改为刚刚定义的通用返回类型BaseResponse即可
效果
我们打开接口测试界面,可以看到,数据已经按照通用类的格式返回了。