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:
{ "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:
throw Problem.valueOf(Status.NOT_FOUND);
eller
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:
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();