Spring Boot 4-mikrotjänster och REST API:er · Lektion

Problemdetaljer (RFC 7807)

Returnera standardiserade felsvar.

Lektion 4 av 413 steg

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 problemtypen
  • title — en kort, läsbar sammanfattning
  • status — HTTP-statuskoden
  • detail — detaljer för den aktuella förekomsten
  • instance — 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: true

Utö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 type fö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, detail och instance
  • Springs ProblemDetail representerar formatet och skickas som application/problem+json
  • Aktivera inbyggd konvertering via spring.mvc.problemdetails.enabled
  • Lägg till utökningsmedlemmar med setProperty
  • Utöka ResponseEntityExceptionHandler för att utforma framework-fel
Gratis att börja

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

  1. Bean-validering med @Valid
  2. Anpassade validatorer
  3. @ControllerAdvice och @ExceptionHandler
  4. Problemdetaljer (RFC 7807)
← Tillbaka till Spring Boot 4-mikrotjänster och REST API:er