HttpMediaTypeNotAcceptableException i foråret MVC

1. Oversigt

I denne hurtige artikel vil vi se på HttpMediaTypeNotAcceptableException undtagelse og forstå de tilfælde, hvor vi kan støde på det.

2. Problemet

Når vi implementerer et API-slutpunkt med Spring, skal vi generelt angive de forbrugte / producerede medietyper (via forbruger og producerer parametre). Dette indsnævrer de mulige formater, som API'en vender tilbage til klienten til den specifikke handling.

HTTP har også dedikeret "Acceptere" header - som bruges til at specificere medietyper, som klienten genkender og kan acceptere. Kort sagt, serveren sender en ressourcerepræsentation tilbage ved hjælp af en af ​​de medietyper, som klienten anmodede om.

Men hvis der ikke er nogen almindelig type, som begge sider kan arbejde med, vil Spring kaste HttpMediaTypeNotAcceptableException undtagelse.

3. Praktisk eksempel

Lad os oprette et simpelt eksempel, der viser dette scenario.

Vi skal bruge et POST-slutpunkt - som kun kan arbejde med "Ansøgning/json og returnerer også JSON-data:

@PostMapping (værdi = "/ test", forbruger = MediaType.APPLICATION_JSON_VALUE, producerer = MediaType.APPLICATION_JSON_VALUE) offentligt korteksempel () {returner Collections.singletonMap ("nøgle", "værdi"); }

Lad os derefter sende en anmodning ved hjælp af CURL med en ikke-genkendt indholdstype:

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

Svaret vi fik er:

<HTTP / 1.1 406 <Indholdslængde: 0

4. Løsningen

Der er kun én måde at løse problemet på - at sende / modtage en af ​​de understøttede typer.

Alt hvad vi kan gøre er at give en mere beskrivende besked (som standard returnerer Spring en tom krop) med en brugerdefineret Undtagelse Håndterer underrette en klient om alle acceptable medietyper.

I vores tilfælde er det kun “Ansøgning / json”:

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

5. Konklusion

I denne vejledning har vi overvejet HttpMediaTypeNotAcceptableException undtagelse kastet af Spring MVC, når der er et misforhold mellem hvad klienten beder om, og hvad serveren faktisk kan producere.

Som altid kan kodestykkerne, der er nævnt i artiklen, findes i vores GitHub-arkiv.


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