Я работаю над службой 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;
};
Кто-нибудь сталкивался с этой проблемой и даже лучше нашел решение?