竹简文档
Dubbo Triple

TripleResponse

TripleResponse<T> 泛型响应体,统一 Dubbo Triple RPC 返回格式

TripleResponse

TripleResponse<T> 是 Dubbo Triple RPC 的统一响应封装,采用泛型设计承载业务数据。所有 Triple 服务方法均应返回该类型,确保微服务间通信格式一致。

类定义

TripleResponse.java
package com.xlf.utility.triple;

import lombok.experimental.SuperBuilder;
import java.io.Serializable;

// 泛型响应体,T 为业务数据类型
@SuperBuilder
public class TripleResponse<T> implements Serializable {
    private String context;
    private Boolean success;
    private String code;
    private String message;
    private T data;
    private Long duration;
    private Long timestamp;
}

字段说明

字段

类型

响应示例

成功响应

success-response.json
{
  "context": "550e8400-e29b-41d4-a716-446655440000",
  "success": true,
  "code": "200",
  "message": "查询成功",
  "data": {
    "userId": 10001,
    "username": "xiao_lfeng",
    "email": "test@example.com"
  },
  "duration": 23,
  "timestamp": 1772620800000
}

失败响应

error-response.json
{
  "context": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "success": false,
  "code": "40004",
  "message": "参数无效: 用户 ID 不能为空",
  "data": null,
  "duration": 2,
  "timestamp": 1772620800000
}

异常响应

exception-response.json
{
  "context": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
  "success": false,
  "code": "500",
  "message": "系统异常: NullPointerException",
  "data": null,
  "duration": 156,
  "timestamp": 1772620800000
}

与 BaseResponse 的区别

维度BaseResponse<E>TripleResponse<T>
适用场景HTTP REST APIDubbo Triple RPC
状态码类型Integer(5 位数字码)String(数字码字符串)
序列化Jackson JSONDubbo 序列化(Protobuf / Hessian2)
上下文来源MVC ContextHolderDubbo ContextHolder
成功标志依据 code 判断显式 success 布尔值

构建方式

通常不直接构建 TripleResponse,而是通过 TripleResult 静态工厂方法创建:

TripleResponseBuild.java
// 推荐:使用 TripleResult 工厂方法
TripleResponse<UserDTO> response = TripleResult.success(userDTO, "查询成功");

// 直接 Builder 构建(不推荐,需手动填充上下文信息)
TripleResponse<UserDTO> response = TripleResponse.<UserDTO>builder()
        .context(ContextHolder.getContextId())
        .success(true)
        .code("200")
        .message("查询成功")
        .data(userDTO)
        .duration(ContextHolder.getDuration())
        .timestamp(System.currentTimeMillis())
        .build();

下一步

On this page