HttpMediaTypeNotAcceptableException na jar MVC

1. Prehľad

V tomto rýchlom článku sa pozrieme na HttpMediaTypeNotAcceptableException výnimkou a rozumieme prípadom, kedy by sme sa s tým mohli stretnúť.

2. Problém

Pri implementácii koncového bodu API s programom Spring musíme všeobecne špecifikovať spotrebované / vyrobené typy médií (prostredníctvom servera spotrebúva a vyrába parametre). Tým sa zúžia možné formáty, ktoré rozhranie API vráti klientovi pre konkrétnu operáciu.

HTTP má tiež vyhradené "Súhlasiť" hlavička - slúži na špecifikáciu typov médií, ktoré klient rozpozná a môže ich akceptovať. Jednoducho povedané, server pošle späť reprezentáciu prostriedkov pomocou jedného z typov médií, ktoré klient požadoval.

Ak však neexistuje spoločný typ, s ktorým môžu obe strany pracovať, Spring hodí HttpMediaTypeNotAcceptableException výnimkou.

3. Praktický príklad

Vytvorme si jednoduchý príklad, ktorý demonštruje tento scenár.

Budeme používať koncový bod POST - s ktorým je možné pracovať iba „Prihláška /json a vráti tiež dáta JSON:

@PostMapping (value = "/ test", consumes = MediaType.APPLICATION_JSON_VALUE, produce = MediaType.APPLICATION_JSON_VALUE) public Map example () {return Collections.singletonMap ("key", "value"); }

Potom pošleme žiadosť pomocou CURL s nerozpoznaným typom obsahu:

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

Odpoveď, ktorú sme dostali, je:

<HTTP / 1.1 406 <Dĺžka obsahu: 0

4. Riešenie

Existuje iba jeden spôsob riešenia problému - odoslanie / prijatie jedného z podporovaných typov.

Všetko, čo môžeme urobiť, je poskytnúť popisnejšiu správu (štandardne Spring vracia prázdne telo) s zvykom ExceptionHandler upozornenie klienta na všetky prijateľné typy médií.

V našom prípade je to iba „Application / json“:

@ResponseBody @ExceptionHandler (HttpMediaTypeNotAcceptableException.class) public String handleHttpMediaTypeNotAcceptableException () {návrat "prijateľný typ MIME:" + MediaType.APPLICATION_JSON_VALUE; }

5. Záver

V tomto návode sme zvážili HttpMediaTypeNotAcceptableException výnimka vyvolaná Spring MVC, keď existuje nesúlad medzi tým, čo klient požaduje, a tým, čo server môže skutočne vyrobiť.

Útržky kódu uvedené v článku nájdete ako vždy v našom úložisku GitHub.


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