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 |
---|
|
{
"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 |
---|
|
throw Problem.valueOf(Status.NOT_FOUND); |
ellervilket skulle generera svaret:
Code Block |
---|
|
{
"title": "Not Found",
"status": 404
} |
Om lite ytterligare information önskas:
Code Block |
---|
|
throw Problem.valueOf(Status.INTERNAL_SERVER_ERROR, "Database seems to be down") |
med tillhörande svar:
Code Block |
---|
|
{
"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 |
---|
|
{
"status": 404,
"title": "No such item",
"detail": "Item 76E4E924-211B-4576-9645-559723812DEB not found",
"item": "76E4E924-211B-4576-9645-559723812DEB"
} |