import ballerina/http;endpoint http:Listener sampleEP {
    port:9090
};@http:ServiceConfig
service<http:Service> sample bind sampleEP {    @http:ResourceConfig {
        methods:["GET"],
        path:"/path/{foo}"
    }
    params (endpoint client, http:Request req, string foo) {
        var params = req.getQueryParams();
        var bar = <string> params.bar;
        map pathMParams = req.getMatrixParams("/sample/path");
        var a = <string> pathMParams.a;
        var b = <string> pathMParams.b;
        string pathMatrixStr = string `a={{a}}, b={{b}}`;
        map fooMParams = req.getMatrixParams("/sample/path/" + foo);
        var x = <string> fooMParams.x;
        var y = <string> fooMParams.y;
        string fooMatrixStr = string `x={{x}}, y={{y}}`;
        json matrixJson = {"path":pathMatrixStr, "foo":fooMatrixStr};
        json responseJson = {"pathParam":foo, "queryParam":bar, "matrix":matrixJson};
        http:Response res = new;
        res.setJsonPayload(responseJson);
        _ = client -> respond(res);
    }
}

Query/Path/Matrix Param

Ballerina support extracting values PathParam, QueryParam and MatrixParam.

import ballerina/http;
endpoint http:Listener sampleEP {
    port:9090
};
@http:ServiceConfig
service<http:Service> sample bind sampleEP {
    @http:ResourceConfig {
        methods:["GET"],
        path:"/path/{foo}"
    }
    params (endpoint client, http:Request req, string foo) {

PathParam and QueryParam extract values from the request URI.

        var params = req.getQueryParams();
        var bar = <string> params.bar;

Get QueryParam.

        map pathMParams = req.getMatrixParams("/sample/path");
        var a = <string> pathMParams.a;
        var b = <string> pathMParams.b;
        string pathMatrixStr = string `a={{a}}, b={{b}}`;
        map fooMParams = req.getMatrixParams("/sample/path/" + foo);
        var x = <string> fooMParams.x;
        var y = <string> fooMParams.y;
        string fooMatrixStr = string `x={{x}}, y={{y}}`;
        json matrixJson = {"path":pathMatrixStr, "foo":fooMatrixStr};

Get Matrix params

        json responseJson = {"pathParam":foo, "queryParam":bar, "matrix":matrixJson};
        http:Response res = new;

Create json payload with the extracted values.

        res.setJsonPayload(responseJson);

A util method to set the json payload to the response message.

        _ = client -> respond(res);
    }
}

Send a response to the client.

$ ballerina run query-path-matrix-param.bal
ballerina: initiating service(s) in '.../query-path-and-matrix-param.bal'
ballerina: started HTTP/WS server connector 0.0.0.0:9090
$ curl "http://localhost:9090/sample/path;a=4;b=5/value1;x=10;y=15?bar=value2"
{
    "pathParam": "value1",
    "queryParam": "value2",
    "matrix": {
        "path": "a=4, b=5",
        "foo": "x=10, y=15"
    }
}