You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ballerina中JSON转自定义Record未返回精简响应,如何解决?

解决方案

问题的核心是资源函数未明确指定返回类型,导致Ballerina序列化时保留了原始JSON的所有字段。以下是两种可行的修复方式:

方式一:手动构造目标Record(推荐)

直接从原始JSON中提取需要的字段,构造ResponseDto实例,同时明确函数返回类型:

public type ResponseDto record {
    string ID;
    string name;
};

isolated resource function get() returns ResponseDto|error {
    var httpClient = check getHttpClient();
    string endpoint = `/v1/external/api`;
    var headers = utils:createHeaders(ctx);
    json fullResponse = check httpClient->get(endpoint, headers, targetType = json);
    
    // 提取所需字段构造精简响应
    ResponseDto res = {
        ID: fullResponse.ID,
        name: fullResponse.name
    };
    
    return res;
}

方式二:明确返回类型并使用cloneWithType

如果偏好使用类型转换,只需为资源函数添加明确的返回类型约束:

public type ResponseDto record {
    string ID;
    string name;
};

isolated resource function get() returns ResponseDto|error {
    var httpClient = check getHttpClient();
    string endpoint = `/v1/external/api`;
    var headers = utils:createHeaders(ctx);
    json response = check httpClient->get(endpoint, headers, targetType = json);
    ResponseDto res = check response.cloneWithType();
    return res;
}

关键说明

  • 必须指定函数返回类型为ResponseDto|error,这会强制Ballerina的HTTP序列化逻辑仅保留ResponseDto中定义的字段。
  • 若不指定返回类型,Ballerina会默认将返回值视为json类型,序列化时会包含原始响应的所有字段,导致精简失败。

内容的提问来源于stack exchange,提问作者Kavindu Gimhan Zoysa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:05:12