Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

För felhantering använder ramverket Problem och specialiseringen Problem Spring Web MVC från Zalando, som är ett bibliotek som implementerar application/problem.json (RFC 7807 - Problem Details for HTTP APIs).

Felmeddelanden i tjänster som använder ramverket kommer att ha följande ett utseende liknande:

Code Block
languagejson
{
    "type": "https://example.com/probs/out-of-credit",            [1]
    "status": 400,                                                [2]
    "title": "You do not have enough credit.",                    [23]
    "detail": "Your current balance is 30, but that costs 50.",   [34]
    "instance": "/account/12345/msgs/abc",                        [45]
    "balance": 30,                                                [5]
    "accounts": ["/account/12345", "/account/67890"]              [5]
   }

[1] Fel-typ (ej obligatorisk)
[2] HTTP-status
[3] Titel - en kort summering av felet
[4] Beskrivning - en längre beskrivning av felet (ej obligatorisk)
[5] Valfria fält - kan innehålla i princip vad som helst (ej obligatoriska)

Felhantering “out-of-the-box”

...

Code Block
languagejava
throw Problem.valueOf(Status.NOT_FOUND);

ellervilket skulle generera svaret:

Code Block
languagejson
{
  "title": "Not Found",
  "status": 404
}


Om lite ytterligare information önskas:

Code Block
languagejava
throw Problem.valueOf(Status.INTERNAL_SERVER_ERROR, "Database seems to be down")

med tillhörande svar:

Code Block
languagejson
{
  "title": "Internal Server Error",
  "status": 500,
  "detail": "Database seems to be down"
}


I andra fall behövs mer information, och då tillhandahåller Problem-biblioteket en builder:

Code Block
throw Problem.builder()
    .withStatus(Status.NOT_FOUND)
    .withTitle("No such instanceitem")
    .withDetail("InstanceItem 76E4E924-211B-4576-9645-559723812DEB not found")
    .with("instanceitem", "76E4E924-211B-4576-9645-559723812DEB")
    .build();

vilket då skulle ge svaret:

Code Block
languagejson
{
  "status": 404,
  "title": "No  such item",
  "detail": "Item 76E4E924-211B-4576-9645-559723812DEB not found",
  "item": "76E4E924-211B-4576-9645-559723812DEB"
}