Felhantering
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 ett utseende liknande:
{
"type": "https://example.com/probs/out-of-credit", [1]
"status": 400, [2]
"title": "You do not have enough credit.", [3]
"detail": "Your current balance is 30, but that costs 50.", [4]
"instance": "/account/12345/msgs/abc", [5]
"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”
Följande felhantering är konfigurerad som standard:
Fel | HTTP-status | |
---|---|---|
Generellt | ||
|
| (beror på) |
|
|
|
|
|
|
HTTP | ||
|
|
|
|
|
|
|
|
|
I/O | ||
|
|
|
|
|
|
|
|
|
Nätverk | ||
|
|
|
Routing | ||
|
|
|
|
|
|
|
|
|
|
|
|
Validering | ||
|
|
|
|
|
|
Egna fel
I vissa lägen räcker HTTP-status för att förmedla tillräcklig information om ett fel. Då kan följande räcka för att kasta ett fel:
throw Problem.valueOf(Status.NOT_FOUND);
vilket skulle generera svaret:
{
"title": "Not Found",
"status": 404
}
Om lite ytterligare information önskas:
med tillhörande svar:
I andra fall behövs mer information, och då tillhandahåller Problem-biblioteket en builder:
vilket då skulle ge svaret: