Problem Details (RFC 7807)
Palauttakaa standardoidut virhevastausviestit.
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ä URItitle— lyhyt, ihmiselle luettava yhteenvetostatus— HTTP-tilakoodidetail— tämän esiintymän tarkemmat tiedotinstance— 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: trueLaajentaminen 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
typeasiakaslogiikkaa 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,detailjainstance - Springin
ProblemDetailmallintaa standardin, ja vastaukset tarjotaan muodossaapplication/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
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
- Bean-validointi @Valid-annotaatiolla
- Mukautetut validaattorit
- @ControllerAdvice ja @ExceptionHandler
- Problem Details (RFC 7807)