美文网首页
日拱一卒:构建返回值对象Result

日拱一卒:构建返回值对象Result

作者: Tinyspot | 来源:发表于2023-08-13 19:16 被阅读0次

1. 基础类

public class BaseDTO implements Serializable {
    private static final long serialVersionUID = 6834904326840816382L;

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }
}

2. 返回值对象

2.1 单个返回值

@Data
public class SingleResultDTO<T> extends BaseDTO {
    private static final long serialVersionUID = 9152707026471809485L;

    private Boolean success;
    private T result;
    private String errorCode;
    private String errorMessage;
    private String extErrorMessage;
    private Throwable throwable;

    public static <T> SingleResultDTO<T> successResult(T data) {
        SingleResultDTO<T> result = new SingleResultDTO<T>();
        result.success(data);
        return result;
    }

    public static <T> SingleResultDTO<T> failResult(String errorCode, String errorMessage, String extErrorMessage) {
        SingleResultDTO<T> result = new SingleResultDTO<T>();
        result.error(errorCode, errorMessage, extErrorMessage);
        return result;
    }

    public static <T> SingleResultDTO<T> failResult(String errorCode, String errorMessage) {
        SingleResultDTO<T> result = new SingleResultDTO<T>();
        result.error(errorCode, errorMessage);
        return result;
    }

    protected void success(T data) {
        setResult(data);
        setSuccess(true);
    }

    protected void error(String errorCode, String errorMessage, String extErrorMessage) {
        error(errorCode, errorMessage);
        setExtErrorMessage(extErrorMessage);
    }

    protected void error(String errorCode, String errorMessage) {
        setErrorCode(errorCode);
        setErrorMessage(errorMessage);
        setSuccess(false);
    }
}

2.2 多个返回值

@Data
public class BatchResultDTO<T> extends SingleResultDTO<List<T>> {
    private static final long serialVersionUID = 4908634527589261759L;

    public static <T> BatchResultDTO<T> successBatchResult(List<T> data) {
        BatchResultDTO<T> result = new BatchResultDTO<>();
        result.success(data);
        return result;
    }

    public static <T> BatchResultDTO<T> failBatchResult(String errorCode, String errorMessage, String extErrorMessage) {
        BatchResultDTO<T> result = new BatchResultDTO<>();
        result.error(errorCode, errorMessage, extErrorMessage);
        return result;
    }
}

2.3 多个返回值-简化版

@Data
public class BatchResultDTO<T> extends BaseDTO {
    private static final long serialVersionUID = 8018937656407814384L;

    private Boolean success;
    private List<T> result;

    public static <T> BatchResultDTO<T> successResult(List<T> data) {
        BatchResultDTO<T> result = new BatchResultDTO<>();
        result.success(data);
        return result;
    }

    protected void success(List<T> data) {
        setResult(data);
        setSuccess(true);
    }
}

3. 使用

3.1 接口

public interface OrderService {
    SingleResultDTO<OrderDTO> queryOrderByCode(String orderCode);
    BatchResultDTO<OrderDTO> queryOrdersByTradeId(String tradeId);
}

@Service
public class OrderServiceImpl implements OrderService {
    @Override
    public SingleResultDTO<OrderDTO> queryOrderByCode(String orderCode) {
        try {
            OrderDTO orderDTO = new OrderDTO("1001", "2020");
            // do something
            return SingleResultDTO.successResult(orderDTO);
        } catch (RuntimeException e) {
            return SingleResultDTO.failResult("errorCode", "errorMessage");
        } catch (Throwable t) {
            throw new RuntimeException("errorMessage", t);
        }
    }

    @Override
    public BatchResultDTO<OrderDTO> queryOrdersByTradeId(String tradeId) {
        try {
            List<OrderDTO> orders = Arrays.asList(new OrderDTO("1001", "2020"),
                    new OrderDTO("1002", "2021"));
            // do something
            return BatchResultDTO.successBatchResult(orders);
        } catch (RuntimeException e) {
            return BatchResultDTO.failBatchResult("errorCode", "errorMessage", "extErrorMessage");
        } catch (Throwable t) {
            throw new RuntimeException("errorMessage", t);
        }
    }
}

3.2 返回结果

单个返回值

{
    "result": {
        "orderCode": "1001",
        "tradeId": "2020"
    },
    "success": true
}

多个返回值

{
    "result": [
        {
            "orderCode": "1001",
            "tradeId": "2020"
        },
        {
            "orderCode": "1002",
            "tradeId": "2021"
        }
    ],
    "success": true
}

相关文章

网友评论

      本文标题:日拱一卒:构建返回值对象Result

      本文链接:https://www.haomeiwen.com/subject/wwcqmdtx.html