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

时间:2019-03-27 07:15:01

标签: type-conversion ballerina

我正在开发一种Ballerina服务,该服务接收一个事件,并使用convert函数将JSON有效负载转换为记录。该事件包含一个名称为type的字段,该字段是Ballerina中的保留关键字。我无法更改事件的有效负载。以下是由于string type;记录中的Event而导致无法编译的简化示例代码。将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\"}"

我通读了芭蕾舞女演员API documentation,但对这个话题一无所获。

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

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

有人遇到这个问题,甚至找到更好的解决办法了吗?

1 个答案:

答案 0 :(得分:0)

您可以如下定义事件:

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

^用于在Ballerina中对关键字进行转义。 访问它时,您也可以将其用作event.^"type"

Here,您可以找到用法示例。