HttpMediaTypeNotAcceptableException u proljetnom MVC-u

1. Pregled

U ovom ćemo kratkom članku pogledati HttpMediaTypeNotAcceptableException izuzetak i razumjeti slučajeve u kojima bismo se mogli susresti.

2. Problem

Kada implementiramo API krajnju točku s Springom, općenito moramo navesti konzumirane / proizvedene vrste medija (putem troši i proizvodi parametri). To sužava moguće formate koje će API vratiti klijentu za tu određenu operaciju.

HTTP također ima namjenski "Prihvatiti" zaglavlje - koje se koristi za određivanje vrsta medija koje klijent prepoznaje i može prihvatiti. Jednostavno rečeno, poslužitelj će poslati natrag prikaz resursa koristeći jednu od vrsta medija koje je klijent zatražio.

Međutim, ako ne postoji uobičajeni tip s kojim obje strane mogu raditi, Spring će baciti HttpMediaTypeNotAcceptableException iznimka.

3. Praktični primjer

Stvorimo jednostavan primjer koji će pokazati ovaj scenarij.

Koristit ćemo POST krajnju točku - s kojom može raditi samo “Prijava /json a vraća i JSON podatke natrag:

@PostMapping (vrijednost = "/ test", troši = MediaType.APPLICATION_JSON_VALUE, proizvodi = MediaType.APPLICATION_JSON_VALUE) primjer javne karte () {return Collections.singletonMap ("key", "value"); }

Zatim, pošaljite zahtjev pomoću CURL-a s nepriznatom vrstom sadržaja:

curl -X POST - zaglavlje "Accept: application / pdf" // localhost: 8080 / test -v> POST / test HTTP / 1.1> Host: localhost: 8080> User-Agent: curl / 7.51.0> Accept: application / pdf

Odgovor koji smo dobili je:

<HTTP / 1.1 406 <Duljina sadržaja: 0

4. Rješenje

Postoji samo jedan način za rješavanje problema - slanje / primanje jedne od podržanih vrsta.

Sve što možemo učiniti je pružiti opisniju poruku (prema zadanim postavkama Spring vraća prazno tijelo) s prilagođenim ExceptionHandler obavještavanje klijenta o svim prihvatljivim vrstama medija.

U našem slučaju, to je samo “Aplikacija / json”:

@ResponseBody @ExceptionHandler (HttpMediaTypeNotAcceptableException.class) javni niz handleHttpMediaTypeNotAcceptableException () {return "prihvatljiv MIME tip:" + MediaType.APPLICATION_JSON_VALUE; }

5. Zaključak

U ovom smo tutorijalu razmotrili HttpMediaTypeNotAcceptableException izuzetak koji dobavlja Spring MVC kada postoji neusklađenost između onoga što klijent traži i onoga što poslužitelj zapravo može proizvesti.

Kao i uvijek, isječci koda spomenuti u članku mogu se naći u našem GitHub spremištu.


$config[zx-auto] not found$config[zx-overlay] not found