A HttpMediaTypeNotAcceptableException tavaszi MVC-ben

1. Áttekintés

Ebben a gyors cikkben megnézzük a HttpMediaTypeNotAcceptableException kivétel, és értse meg azokat az eseteket, amikor találkozhatunk vele.

2. A probléma

Amikor egy API-végpontot Spring-sel valósítunk meg, általában meg kell adnunk az elfogyasztott / előállított adathordozó típusokat (a fogyaszt és termel paraméterek). Ez szűkíti azokat a lehetséges formátumokat, amelyeket az API vissza fog adni az ügyfélnek az adott művelethez.

A HTTP-nek is van dedikáltja "Elfogad" fejléc - amely az ügyfél által felismert és elfogadható médiatípusok meghatározására szolgál. Egyszerűen fogalmazva, a kiszolgáló visszaküldi az erőforrás-reprezentációt az ügyfél által kért adathordozó-típusok egyikével.

Ha azonban nincs olyan közös típus, amellyel mindkét fél együtt dolgozhatna, akkor Spring eldobja HttpMediaTypeNotAcceptableException kivétel.

3. Gyakorlati példa

Készítsünk egy egyszerű példát, amely bemutatja ezt a forgatókönyvet.

POST végpontot fogunk használni - amely csak akkor működhet "Alkalmazás/json és visszaküldi a JSON-adatokat is:

@PostMapping (value = "/ test", fogyaszt = MediaType.APPLICATION_JSON_VALUE, produkál = MediaType.APPLICATION_JSON_VALUE) public Map példa () {return Collections.singletonMap ("kulcs", "érték"); }

Ezután küldjünk el egy kérést a CURL használatával egy nem elismert tartalomtípusnál:

curl -X POST - header "Elfogadás: alkalmazás / pdf" // localhost: 8080 / test -v> POST / teszt HTTP / 1.1> Gazdagép: localhost: 8080> Felhasználó-ügynök: göndör / 7.51.0> Elfogadás: alkalmazás / pdf

A választ kaptuk:

<HTTP / 1.1 406 <Tartalom-hossz: 0

4. A megoldás

A probléma megoldásának egyetlen módja van - a támogatott típusok egyikének elküldése / fogadása.

Mindössze annyit tehetünk, hogy egy leíróbb üzenetet adunk meg (alapértelmezés szerint a Spring egy üres törzset ad vissza) egy egyéni beállítással ExceptionHandler értesíteni az ügyfelet az összes elfogadható médiatípusról.

Esetünkben csak „Alkalmazás / json”:

@ResponseBody @ExceptionHandler (HttpMediaTypeNotAcceptableException.class) public String handleHttpMediaTypeNotAcceptableException () {return "elfogadható MIME típus:" + MediaType.APPLICATION_JSON_VALUE; }

5. Következtetés

Ebben az oktatóanyagban figyelembe vettük a HttpMediaTypeNotAcceptableException kivétel, amelyet a Spring MVC dobott el, amikor nem egyezik az ügyfél által kért adatok és a szerver által ténylegesen előállított adatok között.

Mint mindig, a cikkben említett kódrészletek megtalálhatók a GitHub-adattárunkban.