如何将保留关键字作为名称的 JSON 有效负载转换为记录在 Ballerina 中

How to convert JSON payload with reserved keyword as name to record in Ballerina

我正在开发 Ballerina 服务,该服务接收事件并使用 convert 函数将 JSON 有效负载转换为记录。该事件包含一个名为 type 的字段,这是 Ballerina 中的保留关键字。我无法更改事件的有效负载。由于 Event 记录中的 string type;,以下是无法编译的简化示例代码。将 type 更改为 TypeeventType 允许编译,但执行会抛出错误,因为 JSON 有效负载的字段名称与记录的字段名称不匹配。

import ballerina/http;
import ballerina/io;

type Event record {
    string id;
    string type;    
    string time;
};

@http:ServiceConfig { basePath: "/" }
service eventservice on new http:Listener(8080) {

    @http:ResourceConfig { methods: ["POST"], path: "/" }
    resource function handleEvent(http:Caller caller, http:Request request) {
        json|error payload = request.getJsonPayload();
        Event|error event = Event.convert(payload);
        io:println(event);
        http:Response response = new;
        _ = caller -> respond(response);
    }
}

这是一个 curl 命令,它发送一个带有 JSON 负载和名称为 type.

的字段的示例事件
curl -X POST localhost:8080 -H "content-type: application/json" -d "{\"id\":\"1\",\"type\":\"newItem\",\"time\":\"now\"}"

我通读了 Ballerinas API documentation,但没有找到任何关于这个主题的内容。

来自 Java 世界,我希望在记录字段上有这样的注释:

type Event record {
    string id;
    @JsonProperty("type")
    string eventType;    
    string time;
};

有没有人运行解决这个问题并且找到了更好的解决方案?

您可以按如下方式定义事件:

type Event record {
    string id;
    string 'type;    
    string time;
};

'用于转义Ballerina中的关键字。 访问它时,您也可以将其用作 event.'type

Here 您可以找到示例用法。