Как преобразовать полезную нагрузку JSON с зарезервированным ключевым словом в качестве имени для записи в Ballerina - PullRequest
2 голосов
/ 27 марта 2019

Я работаю над службой Ballerina, которая получает событие и преобразует полезную нагрузку JSON в запись, используя функцию convert.Событие содержит поле с именем type, которое является зарезервированным ключевым словом в Ballerina.Я не могу изменить полезную нагрузку события.Ниже приведен упрощенный пример кода, который не компилируется из-за string type; в записи Event.Изменение type на Type или eventType позволяет выполнить компиляцию, но выполнение выдает ошибки, поскольку имена полей полезной нагрузки 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 и ничего не нашел по этому вопросуtopic.

Исходя из мира Java, я ожидал бы что-то вроде аннотации в поле записей, например:

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

Кто-нибудь сталкивался с этой проблемой и даже лучше нашел решение?

1 Ответ

0 голосов
/ 27 марта 2019

Вы можете определить Событие следующим образом:

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

^ используется для экранирования ключевого слова в балерине.При доступе к нему также вы можете использовать его как event.^"type"

Здесь вы можете найти пример использования.

...