一个 通用返回类 + 静态构造方法 + 与错误码枚举配合 的结构,这样调用会很方便。
java
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
public class BaseRsp<T> implements Serializable {
@JsonProperty("code")
private String code;
@JsonProperty("message")
private String message;
@JsonProperty("data")
private T data;
public BaseRsp() {
}
public BaseRsp(String code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public BaseRsp(ErrorCode errorCode) {
this.code = String.valueOf(errorCode.getCode());
this.message = errorCode.getMessage();
}
public BaseRsp(ErrorCode errorCode, T data) {
this.code = String.valueOf(errorCode.getCode());
this.message = errorCode.getMessage();
this.data = data;
}
public BaseRsp(ErrorCode errorCode, String message) {
this.code = String.valueOf(errorCode.getCode());
this.message = message;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
/** 成功返回 */
public static <T> BaseRsp<T> success(T data) {
return new BaseRsp<>(ErrorCode.SUCCESS, data);
}
/** 成功无数据 */
public static <T> BaseRsp<T> success() {
return new BaseRsp<>(ErrorCode.SUCCESS, null);
}
/** 失败返回(使用枚举默认message) */
public static <T> BaseRsp<T> fail(ErrorCode errorCode) {
return new BaseRsp<>(errorCode);
}
/** 失败返回(自定义message) */
public static <T> BaseRsp<T> fail(ErrorCode errorCode, String message) {
return new BaseRsp<>(errorCode, message);
}
}
使用示例:
成功返回
java
return BaseRsp.success(user);
返回 JSON:
java
{
"code": "0",
"message": "success",
"data": {...}
}
失败返回(默认 message)
java
return BaseRsp.fail(ErrorCode.USER_NOT_FOUND);
失败返回(自定义 message)
java
return BaseRsp.fail(ErrorCode.PARAM_ERROR, "用户名不能为空");
Controller 里会非常干净:
java
@GetMapping("/user")
public BaseRsp<User> getUser() {
User user = userService.getUser();
return BaseRsp.success(user);
}
再给你一个 小优化建议(很多公司会这样做):
让 ErrorCode 实现一个接口,例如:
java
public interface IErrorCode {
int getCode();
String getMessage();
}
这样 BaseRsp 可以接收任何错误枚举,扩展性更好。