Back to Examples

REST service - Send different status codes

The subtypes of the http:StatusCodeResponse record type represent different HTTP status code responses. Returning them from the resource function results in the relevant HTTP status code response. To send a non-entity body response, use the relevant constant value declared in the http module. These constant values can be directly returned from the resource method by specifying the relevant return type in the resource function signature. Use this when different status code responses need to be sent without a body and headers.

import ballerina/http;

type Album readonly & record {|
    string title;
    string artist;
|};

table<Album> key(title) albums = table [
    {title: "Blue Train", artist: "John Coltrane"},
    {title: "Jeru", artist: "Gerry Mulligan"}
];

service / on new http:Listener(9090) {

    // The resource returns the `409 Conflict` status code as the error response status code using 
    // the `StatusCodeResponse` constants. This constant does not have a body or headers.
    resource function post albums(Album album) returns Album|http:Conflict {
        if albums.hasKey(album.title) {
            return http:CONFLICT;
        }
        albums.add(album);
        return album;
    }
}

Run the service as follows.

$ bal run send_different_status_code.bal

Invoke the service by executing the following cURL command in a new terminal.

$ curl http://localhost:9090/albums -H "Content-type:application/json" -d "{\"title\": \"Blue Train\", \"artist\": \"John Coltrane\"}" -v> POST /albums HTTP/1.1> Host: localhost:9090> User-Agent: curl/7.79.1> Accept: */*> Content-type:application/json> Content-Length: 50> * Mark bundle as not supporting multiuse< HTTP/1.1 409 Conflict< content-length: 0< server: ballerina< date: Mon, 5 Dec 2022 16:23:51 +0530<

Tip: You can invoke the above service via the Send request/Receive response client example.

Related links

PreviousSend response
NextSend different status codes with payload