HttpMediaTypeNotAcceptableException in Spring MVC

1. Oversikt

I denne raske artikkelen tar vi en titt på HttpMediaTypeNotAcceptableException unntak, og forstå tilfellene der vi kan støte på det.

2. Problemet

Når vi implementerer et API-endepunkt med Spring, må vi generelt spesifisere de forbrukte / produserte mediatypene (via forbruker og produserer parametere). Dette begrenser mulige formater som API vil returnere til klienten for den spesifikke operasjonen.

HTTP har også dedikert "Aksepterer" header - som brukes til å spesifisere mediatyper klienten gjenkjenner og kan godta. Enkelt sagt vil serveren sende en ressursrepresentasjon tilbake ved hjelp av en av medietypene klienten ba om.

Imidlertid, hvis det ikke er noen vanlig type som begge sider kan jobbe med, vil Spring kaste HttpMediaTypeNotAcceptableException unntak.

3. Praktisk eksempel

La oss lage et enkelt eksempel som vil demonstrere dette scenariet.

Vi skal bruke et POST-sluttpunkt - som bare kan fungere med "applikasjon/json og returnerer også JSON-data:

@PostMapping (verdi = "/ test", forbruker = MediaType.APPLICATION_JSON_VALUE, produserer = MediaType.APPLICATION_JSON_VALUE) offentlig karteksempel () {return Collections.singletonMap ("nøkkel", "verdi"); }

La oss deretter sende en forespørsel ved hjelp av CURL med en ikke-gjenkjent innholdstype:

curl -X POST - header "Godta: applikasjon / pdf" // localhost: 8080 / test -v> POST / test HTTP / 1.1> Vert: localhost: 8080> Brukeragent: curl / 7.51.0> Godta: applikasjon / pdf

Svaret vi fikk er:

<HTTP / 1.1 406 <Innholdslengde: 0

4. Løsningen

Det er bare en måte å løse problemet på - å sende / motta en av de støttede typene.

Alt vi kan gjøre er å gi en mer beskrivende melding (som standard returnerer Spring en tom kropp) med en tilpasset ExceptionHandler varsle en klient om alle akseptable medietyper.

I vårt tilfelle er det bare “Applikasjon / json”:

@ResponseBody @ExceptionHandler (HttpMediaTypeNotAcceptableException.class) public String handleHttpMediaTypeNotAcceptableException () {return "akseptabel MIME-type:" + MediaType.APPLICATION_JSON_VALUE; }

5. Konklusjon

I denne opplæringen har vi vurdert HttpMediaTypeNotAcceptableException unntak kastet av Spring MVC når det er et misforhold mellom hva klienten ber om og hva serveren faktisk kan produsere.

Som alltid kan kodebitene som er nevnt i artikkelen finnes i GitHub-depotet vårt.


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