Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät · Oppitunti

Problem Details (RFC 7807)

Palauttakaa standardoidut virhevastausviestit.

Oppitunti 4/413 vaihetta

Problem Details (RFC 7807) on ilmainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 4 oppituntia.

API-virheiden standardi

Jos jokainen tiimi keksii oman virhe-JSON-muotonsa, API-asiakkaiden käyttö muuttuu kaoottiseksi. RFC 7807 määrittelee Problem Details -muodon — standardoidun, koneellisesti luettavan virhemuodon, jonka mediatyyppi on application/problem+json.

Problem Details -kentät

Standardissa määritellään pieni joukko kenttiä:

  • type — ongelman tyypin yksilöivä URI
  • title — lyhyt, ihmiselle luettava yhteenveto
  • status — HTTP-tilakoodi
  • detail — tämän esiintymän tarkemmat tiedot
  • instance — tietyn esiintymän URI

Springin ProblemDetail

Spring Framework 6 / Boot 3 sisältävät sisäänrakennetun ProblemDetail-luokan, joka mallintaa RFC 7807:n suoraan. Luo instanssi tilakoodilla ja mukauta vakiokenttiä.

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"));

ProblemDetailin palauttaminen

Palauta ProblemDetail ohjaimesta tai poikkeuskäsittelijästä. Spring sarjallistaa sen muotoon application/problem+json oikean tilakoodin kanssa.

@ExceptionHandler(OrderNotFoundException.class)
public ProblemDetail handle(OrderNotFoundException ex) {
    ProblemDetail pd = ProblemDetail.forStatusAndDetail(
        HttpStatus.NOT_FOUND, ex.getMessage());
    pd.setTitle("Order Not Found");
    return pd;
}

Sisäänrakennettujen Problem Details -virheiden käyttöönotto

Spring Boot voi muuntaa omat framework-poikkeuksensa automaattisesti Problem Details -muotoon, kun otat ominaisuuden käyttöön. Näin saat yhdenmukaiset virheet myös sisäänrakennetuissa virhetilanteissa.

spring:
  mvc:
    problemdetails:
      enabled: true

Laajentaminen mukautetuilla ominaisuuksilla

RFC 7807 sallii laajennusjäsenet. Lisää toimialuekohtaisia tietoja — kuten virhekoodi, korrelaatiotunnus tai kenttävirheet — metodilla setProperty.

pd.setProperty("errorCode", "ORDER_NOT_FOUND");
pd.setProperty("correlationId", correlationId);
pd.setProperty("timestamp", Instant.now());

ResponseEntityExceptionHandler

Laajenna ResponseEntityExceptionHandler-luokkaa @ControllerAdvice-luokassasi, jotta saat Springin vakiopoikkeuksien käsittelijät käyttöösi. Korvaa sen jälkeen tarvittavat koukut muotoillaksesi vastaukset Problem Details -muotoon.

@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
    // override protected handle... methods to customize
}

Problem Details -muoto validointia varten

Korvaa validointikoukku, jotta kenttävirheet voidaan esittää Problem Details -runkona, jossa on laajennustaulukko. Näin asiakkaat saavat rakenteisen ja standardoidun validointipalautteen.

@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);
}

Miksi type-URI on tärkeä

type-URI antaa jokaiselle ongelmalle pysyvän tunnisteen, jonka perusteella asiakkaat voivat valita toimintansa — tämä on luotettavampaa kuin ihmisille tarkoitetun tekstin jäsentäminen. Ohjaa URI dokumentaatioon, jossa kuvataan virhe ja sen korjaaminen.

Sisällön neuvottelu

Problem Details -vastaukset käyttävät sisältötyyppiä application/problem+json. Asiakkaat voivat tunnistaa tämän mediatyypin ja erottaa rakenteiset virheet tavallisista onnistuneista hyötykuormista.

HTTP/1.1 404 Not Found
Content-Type: application/problem+json

{ "type": "...", "title": "Order Not Found", "status": 404, "detail": "..." }

Standardin käyttöönotto

Problem Details tekee API-virheistä ennakoitavia ja yhteentoimivia:

  • Sama rakenne kaikissa päätepisteissä ja frameworkeissa
  • Koneellisesti luettava type asiakaslogiikkaa varten
  • Laajennettavissa toimialuekohtaisilla tiedoilla

Pikatarkistus

Testaa ymmärryksesi RFC 7807:stä.

Kertaus

Problem Details standardoi API-virheet.

  • RFC 7807 määrittelee kentät type, title, status, detail ja instance
  • Springin ProblemDetail mallintaa standardin, ja vastaukset tarjotaan muodossa application/problem+json
  • Ota sisäänrakennettu muunnos käyttöön asetuksella spring.mvc.problemdetails.enabled
  • Lisää laajennusjäseniä metodilla setProperty
  • Laajenna ResponseEntityExceptionHandler-luokkaa framework-virheiden muotoilemiseksi
Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
24
Oppitunnit
93

Usein kysytyt kysymykset

Onko oppitunti ”Problem Details (RFC 7807)” ilmainen?

Kyllä – oppitunnin ”Problem Details (RFC 7807)” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssin, päivitä CoddyKit PROhon. Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Problem Details (RFC 7807)”?

Palauttakaa standardoidut virhevastausviestit. Harjoittelet Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Problem Details (RFC 7807)”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunnilla?

Kyllä. Jokainen Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Bean-validointi @Valid-annotaatiolla
  2. Mukautetut validaattorit
  3. @ControllerAdvice ja @ExceptionHandler
  4. Problem Details (RFC 7807)
← Takaisin: Spring Boot 4 -mikropalvelut ja REST-sovellusliittymät