【问题标题】:Handling optional query parameters in Ballerina处理 Ballerina 中的可选查询参数
【发布时间】:2018-06-05 20:42:26
【问题描述】:

我有一个服务接受可选的查询参数。调用此服务时出现以下错误。

致命错误:找不到密钥“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;
    ..
    }

【问题讨论】:

    标签: ballerina


    【解决方案1】:

    “req.getQueryParams()”返回一个地图[1]。在这种情况下,您可以根据需要使用任何映射功能[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

    【讨论】:

    • 地图的有趣之处。当我执行req.getQueryParams()["foo"] + " bar" 时,我得到了这个有趣的编译错误:operator '+' not defined for 'string' and 'string?' 显然地图查找返回的是 string? 而不是 string 。我找不到任何关于此的文档,但会假设它是一些 Option 模拟。看不到任何方法。上面有.or 或 .orElse 会比上面的多行命令式代码更实用......
    • 找到了 Optional 文档 -> ballerina.io/learn/by-example/optional-type.html 但这并没有解释太多关于使用 Optional 类型的内容,只是它的存在。
    • 为了完整起见,在 Ballerina 中,可选类型只是预期类型和 nil 联合的简写。那是字符串?是(字符串|())。这就是为什么没有定义类似 .or/.orElese 的方法的原因。但是有语言结构可以帮助处理 nillable 类型(可选的另一个名称)。请参考ballerina.io/v1-1/learn/by-example/elvis-operator.htmlballerina.io/v1-1/learn/by-example/optional-field-access.html
    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2012-03-28
    • 2017-08-21
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 2010-12-04
    相关资源
    最近更新 更多