TODO
...
Problem + Problem Spring Web
...
Vilka fel hanteras, och med vilka statusar?
...
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 utseende:
Code Block | ||
---|---|---|
| ||
{
"type": "https://example.com/probs/out-of-credit", [1]
"title": "You do not have enough credit.", [2]
"detail": "Your current balance is 30, but that costs 50.", [3]
"instance": "/account/12345/msgs/abc", [4]
"balance": 30, [5]
"accounts": ["/account/12345", "/account/67890"] [5]
} |
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:
Code Block | ||
---|---|---|
| ||
throw Problem.valueOf(Status.NOT_FOUND); |
eller
Code Block | ||
---|---|---|
| ||
throw Problem.valueOf(Status.INTERNAL_SERVER_ERROR, "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 instance")
.withDetail("Instance 76E4E924-211B-4576-9645-559723812DEB not found")
.with("instance", "76E4E924-211B-4576-9645-559723812DEB")
.build(); |