Обработка необязательных параметров запроса в Ballerina

У меня есть служба, принимающая параметры запроса, которые являются необязательными. Я получаю следующую ошибку, когда я вызываю эту службу.

фатальная ошибка: не удается найти ключ 'schoolId' ошибка: ошибка, сообщение: не удается найти ключ 'schoolId' в руководстве: studentInfo.getStudentBySearch (student_info.bal: 91)

Ниже приведен мой код. Как я могу безопасно проверить, переданы ли определенные параметры запроса, и продолжить выполнение этих условий?

    @http:ResourceConfig {
        methods: ["GET"],
        path: "/*"
    }
    getStudentBySearch(endpoint client, http:Request req) {

            http:Response response;

            var params = req.getQueryParams();
            var schoolId = <string>params.schoolId;
            var addmissionYear = <string>params.addmissionYear;
    ..
    }

person Lahiru Sandaruwan Gamage    schedule 05.06.2018    source источник


Ответы (1)


req.getQueryParams() возвращает карту[1]. В этом случае вы можете использовать любую карту functions[2] для ваших нужд.

Вы можете использовать функцию hasKey, чтобы проверить, существует ли параметр запроса или нет.

Пример:

map params = request.getQueryParams();
if (params.hasKey("schoolId")) {
    string schoolId = <string>params["schoolId"];
    // Handle here
} else {
    // Handle here
}

[1] – https://ballerina.io/swan-lake/learn/by-example/query-path-matrix-param.html [2] - https://ballerina.io/learn/api-docs/ballerina/lang.map/index.html

person hYk    schedule 06.06.2018
comment
Интересная штука с картами. Когда я делаю req.getQueryParams()["foo"] + " bar", я получаю эту интересную ошибку компиляции: operator '+' not defined for 'string' and 'string?' Очевидно, поиск карты возвращает строку? вместо строки. Я не могу найти никакой документации по этому поводу, но предположу, что это какой-то аналог Option. Не вижу никаких методов на нем. Наличие .or или .orElse было бы более функциональным, чем несколько строк императивного кода выше.... - person WillD; 26.07.2018
comment
Найдена необязательная документация -› ballerina.io/learn/by-example/Optional- type.html, но на самом деле это мало что объясняет об использовании необязательного типа, а только о его существовании. - person WillD; 26.07.2018
comment
Для полноты картины необязательный тип в Ballerina — это просто сокращение для объединения ожидаемого типа и nil. Это строка? есть (строка | ()). Вот почему для него не определены методы, подобные .or/.orElese. Но есть языковые конструкции, которые помогают обрабатывать нулевые типы (другое название для необязательных). См. ballerina.io/v1-1/learn/by- example/elvis-operator.html и ballerina.io/v1-1/learn/by-example/Optional-Field-access.html - person Dhananjaya; 07.01.2020