Java project implements unified encapsulation of API return results (general purpose)

Why do you need to encapsulate the returned results uniformly?

  1. In our actual business development, the unification of returned results can improve the coding efficiency of our back-end personnel

  1. The team develops that all returned data sets can be kept consistent, and the data can be processed quickly

  1. The agreed return set reduces the gap between front-end and back-end personnel every time due to data inconsistency

Return to the concrete implementation class

For coding convenience, I used lombok

/**
 * @author
 * @email [email protected]
 * @date 2023/2/26 14:17
 * @desciption: 全局统一返回结果类
 */
@Data
@Builder
@AllArgsConstructor
public class ResultDto<T> implements Serializable{

    private static final long serialVersionUID = 1L;
    /**
     * 返回码
     */
    private ResultCode code;
    /**
     * 返回消息
     */
    private String message;
    /**
     * 数据数
     */
    private long total;
    /**
     * 返回数据
     */
    private T data;

    public ResultDto(){this.total = Long.valueOf(0L);}

    public ResultDto(ResultCode code){this.code = code;}

    public ResultDto(ResultCode code, T data){
        super();
        this.code = code;
        this.data = data;
        this.message = code.getMessage();
    }

    public String getCode(){
        return this.code.getCode();
    }

    public String getCodeMessage(){
        return this.code.getMessage();
    }
    public static  <T> ResultDto<T> ok(){
        return new ResultDto<T>(ResultCode.OK);
    }

    public static <T> ResultDto ok(T data){
        return ResultDto.builder()
                .code(ResultCode.OK)
                .data(data)
                .message(ResultCode.OK.getMessage())
                .build();
    }

    public static <T> ResultDto ok(T data, long total) {
        return ResultDto.builder()
                .code(ResultCode.OK)
                .data(data)
                .total(total)
                .message(ResultCode.OK.getMessage())
                .build();
    }

    public static <T> ResultDto ok(String message){
        return ResultDto.builder()
                .code(ResultCode.OK)
                .message(message)
                .build();
    }

    public static <T> ResultDto ok(String message, T data){
        return ResultDto.builder()
                .code(ResultCode.OK)
                .message(message)
                .data(data)
                .build();
    }

    public static <T> ResultDto error(){
        return ResultDto.builder()
                .code(ResultCode.ERROR)
                .message(ResultCode.ERROR.getMessage())
                .data(null)
                .build();
    }

    public static <T> ResultDto error(String message){
        return ResultDto.builder()
                .code(ResultCode.ERROR)
                .message(message == null || message.isEmpty() ? ResultCode.ERROR.getMessage() : message)
                .data(null)
                .build();
    }

    public boolean isSuccess(){
        if (this.getCode() == ResultCode.OK.name()){
            return true;
        }
        return false;
    }
}

Return status code enumeration class

Only the most commonly used states are provided here. In actual development, it must be far more than that for different business scenarios. Specifically, it can be added or changed according to the actual needs of the business.

/**
 * @author Yunnuo
 * @email [email protected]
 * @date 2023/2/26 15:25
 * @desciption: 全局统一返回结果状态码
 */
@Getter
public enum ResultCode {

    OK("200", "成功"),
    ERROR("201", "失败"),
    PARAM_ERROR("202", "参数不正确"),
    SERVICE_ERROR("203", "服务异常"),
    DATA_ERROR("204","数据异常"),
    NOT_LOG_IN("205","未登录"),
    NO_ACCESS("206", "没有权限"),
    TOKEN_ERROR("207", "token错误");

    private String code;
    private String message;

    ResultCode(String code,String message){
        this.code = code;
        this.message = message;
    }

    public String getCode(){return this.code;}

    public String getMessage(){return this.message;}

    public static ResultCode codeOf(String code){
        ResultCode status = resolve(code);
        if (status == null){
            throw new IllegalArgumentException("No matching constant for [" + code + "]");
        }
        return status;
    }

    public static ResultCode resolve(String statusCode){
        for (ResultCode resultCode : values()){
            if (resultCode.code == statusCode){
                return resultCode;
            }
        }
        return null;
    }

    public String toString(){
        return this.code + " " + name();
    }
}

Guess you like

Origin blog.csdn.net/u013488276/article/details/129228829