Problemdetaljer (RFC 7807)
Returnera standardiserade felsvar.
Problemdetaljer (RFC 7807) är en gratis lektion i Spring Boot 4-mikrotjänster och REST API:er på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Spring Boot 4-mikrotjänster och REST API:er, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Spring Boot 4-mikrotjänster och REST API:er innehåller totalt 4 lektioner.
En standard för API-fel
Om varje team hittar på sin egen fel-JSON blir det kaos för API-konsumenterna. RFC 7807 definierar Problem Details — ett standardiserat, maskinläsbart format för fel med medietypen application/problem+json.
Fälten i Problem Details
Standarden definierar ett litet antal fält:
type— en URI som identifierar problemtypentitle— en kort, läsbar sammanfattningstatus— HTTP-statuskodendetail— detaljer för den aktuella förekomsteninstance— URI:n för den specifika förekomsten
Springs ProblemDetail
Spring Framework 6 / Boot 3 levereras med den inbyggda klassen ProblemDetail, som direkt representerar RFC 7807. Du skapar den med en status och anpassar standardfälten.
ProblemDetail pd = ProblemDetail.forStatusAndDetail(
HttpStatus.NOT_FOUND, "Order 42 was not found");
pd.setTitle("Order Not Found");
pd.setType(URI.create("https://errors.example.com/order-not-found"));Returnera ProblemDetail
Returnera en ProblemDetail från en controller eller exception handler. Spring serialiserar den som application/problem+json med rätt status.
@ExceptionHandler(OrderNotFoundException.class)
public ProblemDetail handle(OrderNotFoundException ex) {
ProblemDetail pd = ProblemDetail.forStatusAndDetail(
HttpStatus.NOT_FOUND, ex.getMessage());
pd.setTitle("Order Not Found");
return pd;
}Aktivera inbyggda Problem Details
Spring Boot kan automatiskt omvandla sina egna framework-undantag till Problem Details när du aktiverar egenskapen. Då får du konsekventa fel även vid inbyggda fel.
spring:
mvc:
problemdetails:
enabled: trueUtöka med anpassade egenskaper
RFC 7807 tillåter utökningsmedlemmar. Lägg till domänspecifik information — en felkod, ett correlation id eller fältfel — via setProperty.
pd.setProperty("errorCode", "ORDER_NOT_FOUND");
pd.setProperty("correlationId", correlationId);
pd.setProperty("timestamp", Instant.now());ResponseEntityExceptionHandler
Utöka ResponseEntityExceptionHandler i din @ControllerAdvice för att ärva handlers för Springs standardundantag och skriv sedan över krokarna för att utforma dem som Problem Details.
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
// override protected handle... methods to customize
}Problem Details för validering
Skriv över valideringskroken för att uttrycka felfält som en Problem Details-body med en utökningsarray. Då får klienterna strukturerad valideringsfeedback enligt standarden.
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex, HttpHeaders h,
HttpStatusCode status, WebRequest req) {
ProblemDetail pd = ProblemDetail.forStatus(HttpStatus.BAD_REQUEST);
pd.setTitle("Validation Failed");
pd.setProperty("errors", ex.getBindingResult().getFieldErrors().stream()
.map(e -> Map.of("field", e.getField(), "message", e.getDefaultMessage()))
.toList());
return ResponseEntity.badRequest().body(pd);
}Varför type-URI:n är viktig
type-URI:n ger varje problem en stabil identitet som klienter kan använda för att välja logik — det är robustare än att tolka mänsklig text. Låt den peka på dokumentation som beskriver felet och hur det kan åtgärdas.
Innehållsförhandling
Problem Details-svar har innehållstypen application/problem+json. Klienter kan identifiera denna medietyp för att skilja strukturerade fel från vanliga lyckade svar.
HTTP/1.1 404 Not Found
Content-Type: application/problem+json
{ "type": "...", "title": "Order Not Found", "status": 404, "detail": "..." }Använda standarden
Med Problem Details blir dina API-fel förutsägbara och interoperabla:
- En enhetlig struktur för alla endpoints och ramverk
- Maskinläsbar
typeför klientlogik - Utökningsbar med domänspecifika detaljer
Snabb kontroll
Testa dina kunskaper om RFC 7807.
Sammanfattning
Problem Details standardiserar API-fel.
- RFC 7807 definierar
type,title,status,detailochinstance - Springs
ProblemDetailrepresenterar formatet och skickas somapplication/problem+json - Aktivera inbyggd konvertering via
spring.mvc.problemdetails.enabled - Lägg till utökningsmedlemmar med
setProperty - Utöka
ResponseEntityExceptionHandlerför att utforma framework-fel
Lär dig Java med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 24
- Lektioner
- 93
Vanliga frågor
Är lektionen ”Problemdetaljer (RFC 7807)” gratis?
Ja – hela texten till ”Problemdetaljer (RFC 7807)” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Spring Boot 4-mikrotjänster och REST API:er, kan Ni uppgradera till CoddyKit PRO. Kursen i Spring Boot 4-mikrotjänster och REST API:er innehåller totalt 4 lektioner.
Vad lär jag mig i ”Problemdetaljer (RFC 7807)”?
Returnera standardiserade felsvar. Ni övar på Spring Boot 4-mikrotjänster och REST API:er med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Spring Boot 4-mikrotjänster och REST API:er?
Du behöver inga förkunskaper. Utbildningen i Spring Boot 4-mikrotjänster och REST API:er på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Problemdetaljer (RFC 7807)”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Spring Boot 4-mikrotjänster och REST API:er-lektionen?
Ja. Varje Spring Boot 4-mikrotjänster och REST API:er-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Bean-validering med @Valid
- Anpassade validatorer
- @ControllerAdvice och @ExceptionHandler
- Problemdetaljer (RFC 7807)