竹简文档
Dubbo Triple

TripleResult

TripleResult 静态工厂类,快速构建标准化的成功与错误响应

TripleResult

TripleResultTripleResponse<T> 的静态工厂类,提供一组便捷方法用于快速构建标准化的成功与错误响应。该类自动从 MVC ContextHolder 获取链路追踪 ID 与请求耗时,无需手动填充上下文信息。成功响应固定为 success=truecode="200";失败响应会映射 ErrorCode.getCode()(如 "40403""50001")。

成功响应

success()

构建不携带数据的成功响应:

TripleResult.java
// 无数据成功响应
TripleResponse<Void> response = TripleResult.success();

success(T data)

构建携带数据的成功响应:

TripleResult.java
UserDTO user = userService.getById(userId);
// 携带业务数据
TripleResponse<UserDTO> response = TripleResult.success(user);

success(T data, String message)

构建携带数据与自定义消息的成功响应:

TripleResult.java
// 携带数据与自定义消息
TripleResponse<UserDTO> response = TripleResult.success(user, "用户查询成功");

错误响应

error(ErrorCode)

基于 ErrorCode 枚举构建错误响应:

TripleResult.java
// 使用预定义错误码
TripleResponse<Void> response = TripleResult.error(ErrorCode.PARAMETER_ERROR);

error(ErrorCode, String)

基于 ErrorCode 并附带自定义消息:

TripleResult.java
// 自定义错误消息
TripleResponse<Void> response = TripleResult.error(
        ErrorCode.PARAMETER_ERROR, "用户 ID 不能为空");

error(ErrorCode, String, T)

基于 ErrorCode、自定义消息并携带错误详情数据:

TripleResult.java
// 携带错误详情数据
ValidationResult detail = new ValidationResult("userId", "不能为空");
TripleResponse<ValidationResult> response = TripleResult.error(
        ErrorCode.PARAMETER_ERROR, "参数校验失败", detail);

error(Exception)

基于异常对象构建错误响应:

TripleResult.java
try {
    // 业务逻辑
} catch (Exception e) {
    // 异常转错误响应
    return TripleResult.error(e);
}

方法汇总

方法签名返回类型说明
success()TripleResponse<T>无数据成功响应(通常以 T=Void 使用)
success(T data)TripleResponse<T>携带数据的成功响应
success(T data, String message)TripleResponse<T>携带数据与消息的成功响应
error(ErrorCode)TripleResponse<T>基于错误码的失败响应
error(ErrorCode, String)TripleResponse<T>基于错误码与消息的失败响应
error(ErrorCode, String, T)TripleResponse<T>携带错误详情的失败响应
error(Exception)TripleResponse<T>基于异常的失败响应(通常以 T=Void 使用)

上下文自动填充

TripleResult 内部通过 MVC ContextHolder 自动填充以下字段:

  • context - 从 ContextHolder.getContextId() 获取链路追踪 ID
  • duration - 从 ContextHolder.getDuration() 计算请求耗时
  • timestamp - 使用 System.currentTimeMillis() 获取当前时间

因此,使用 TripleResult 前需确保 DubboContextAspect 已正确初始化上下文。

完整使用示例

OrderTripleServiceImpl.java
import com.xlf.utility.ErrorCode;
import com.xlf.utility.triple.TripleResponse;
import com.xlf.utility.triple.TripleResult;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class OrderTripleServiceImpl implements OrderTripleService {

    @DubboPersistentContext
    @TripleRequestCheck(message = "订单查询参数无效", errorCode = ErrorCode.PARAMETER_INVALID)
    @Override
    public TripleResponse<OrderDTO> queryOrder(OrderQueryRequest request) {
        OrderDTO order = orderRepository.findById(request.getOrderId());
        if (order == null) {
            // 业务错误:订单不存在
            return TripleResult.error(
                    ErrorCode.RESOURCE_NOT_FOUND, "订单不存在");
        }
        return TripleResult.success(order, "查询成功");
    }

    @DubboPersistentContext
    @Override
    public TripleResponse<Void> cancelOrder(OrderCancelRequest request) {
        try {
            orderService.cancel(request.getOrderId());
            return TripleResult.success();
        } catch (Exception e) {
            // 异常兜底处理
            return TripleResult.error(e);
        }
    }
}

下一步

On this page