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

Fel

HTTP-status

Generellt

 

Problem

(beror på)

 

Throwable (generellt)

500 Internal Server Error

 

UnsupportedOperationException

501 Not Implemented

HTTP

 

HttpRequestMethodNotSupportedException

405 Method Not Allowed

 

HttpMediaTypeNotAcceptableException

406 Not Acceptable

 

HttpMediaTypeNotSupportedException

415 Unsupported Media Type

I/O

 

HttpMessageNotReadableException

400 Bad Request

 

MultipartException

400 Bad Request

 

TypeMismatchException

400 Bad Request

Nätverk

 

SocketTimeoutException

504 Gateway Timeout

Routing

 

MissingServletRequestParameterException

400 Bad Request

 

MissingServletRequestPartException

400 Bad Request

 

NoHandlerFoundException

404 Not Found

 

ServletRequestBindingException

400 Bad Request

Validering

 

ConstraintViolationException

400 Bad Request

 

MethodArgumentNotValidException

400 Bad Request

 

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: