Dubbo Triple
TripleResult
TripleResult 静态工厂类,快速构建标准化的成功与错误响应
TripleResult
TripleResult 是 TripleResponse<T> 的静态工厂类,提供一组便捷方法用于快速构建标准化的成功与错误响应。该类自动从 MVC ContextHolder 获取链路追踪 ID 与请求耗时,无需手动填充上下文信息。成功响应固定为 success=true、code="200";失败响应会映射 ErrorCode.getCode()(如 "40403"、"50001")。
成功响应
success()
构建不携带数据的成功响应:
// 无数据成功响应
TripleResponse<Void> response = TripleResult.success();success(T data)
构建携带数据的成功响应:
UserDTO user = userService.getById(userId);
// 携带业务数据
TripleResponse<UserDTO> response = TripleResult.success(user);success(T data, String message)
构建携带数据与自定义消息的成功响应:
// 携带数据与自定义消息
TripleResponse<UserDTO> response = TripleResult.success(user, "用户查询成功");错误响应
error(ErrorCode)
基于 ErrorCode 枚举构建错误响应:
// 使用预定义错误码
TripleResponse<Void> response = TripleResult.error(ErrorCode.PARAMETER_ERROR);error(ErrorCode, String)
基于 ErrorCode 并附带自定义消息:
// 自定义错误消息
TripleResponse<Void> response = TripleResult.error(
ErrorCode.PARAMETER_ERROR, "用户 ID 不能为空");error(ErrorCode, String, T)
基于 ErrorCode、自定义消息并携带错误详情数据:
// 携带错误详情数据
ValidationResult detail = new ValidationResult("userId", "不能为空");
TripleResponse<ValidationResult> response = TripleResult.error(
ErrorCode.PARAMETER_ERROR, "参数校验失败", detail);error(Exception)
基于异常对象构建错误响应:
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 已正确初始化上下文。
完整使用示例
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);
}
}
}