Na jar nie je podporovaná metóda žiadosti (405)

1. Prehľad

Tento rýchly článok sa zameriava na bežnú chybu - „Žiadosť o podporu metódy nie je podporovaná - 405“ - ktorej vývojári čelia pri zverejňovaní svojich rozhraní API pre konkrétne slovesá HTTP, pomocou nástroja Spring MVC.

Prirodzene, budeme diskutovať aj o bežných príčinách tejto chyby.

2. Vyžiadajte si základné informácie o metódach

Predtým, ako sa pustíte do spoločného problému, ak sa práve začínate učiť o jarnom MVC, je tu úvodný dobrý úvodný článok.

Poďme sa tiež veľmi rýchlo pozrieť na základné informácie - a pochopme metódy požiadaviek podporované programom Spring a niektorými bežnými triedami, ktoré nás tu zaujímajú.

Veľmi zjednodušeným spôsobom sú metódy MVC HTTP základné operácie, ktoré môže požiadavka spustiť na serveri. Napríklad niektoré metódy aportovať údaje zo servera, niektoré Predložiť údaje na server, niektoré môžu vymazať údaje atď.

The @RequestMapping anotácia určuje podporované metódy pre požiadavku.

Jar deklaruje všetky podporované metódy požiadaviek pod enumom RequestMethod; špecifikuje normu ZÍSKAJTE, HLAVUJTE, Zverejnite, vložte, opravte, odstráňte, MOŽNOSTI, SLEDOVAŤ slovesá.

Pružina DispatcherServlet podporuje všetky štandardne okrem MOŽNOSTI a TRACE; @RequestMapping používa Výpočet metódy RequestMethod určuje, ktoré metódy sú podporované.

3. Jednoduchý scenár MVC

Poďme sa teraz pozrieť na príklad kódu, ktorý mapuje všetky metódy HTTP:

@RestController @RequestMapping (value = "/ api") verejná trieda RequestMethodController {@Autowired súkromná služba EmployeeService; @RequestMapping (hodnota = "/ zamestnanci", produkuje = "aplikácia / json") verejný zoznam findEmployees () hodí InvalidRequestException {return service.getEmployeeList (); }}

Všimnite si, ako príklad deklaruje findEmployee () metóda. Nešpecifikuje žiadnu konkrétnu metódu požiadavky, čo znamená, že táto adresa URL podporuje všetky predvolené metódy.

Môžeme požiadať o API pomocou rôznych podporovaných metód, napríklad pomocou curl:

$ curl --request POST // localhost: 8080 / api / zamestnanci [{"id": 100, "name": "Steve Martin", "contactNumber": "333-777-999"}, {"id": 200, "name": "Adam Schawn", "contactNumber": "444-111-777"}]

Prirodzene, môžeme poslať požiadavku viacerými spôsobmi - jednoduchým zvlnenie príkaz, Poštár, AJAX atď.

A samozrejme očakávame, že dostaneme 200 OK odpoveď, ak je požiadavka správne namapovaná a úspešná.

4. Problémový scenár - HTTP 405

Diskutujeme tu však - samozrejme - o scenároch, keď žiadosť nebude úspešná.

405 Metóda nie je povolená‘Je jednou z najbežnejších chýb, ktoré pozorujeme pri práci s požiadavkami Spring.

Poďme sa pozrieť na to, čo sa stane, ak konkrétne definujeme a vybavíme požiadavky GET na jar MVC, napríklad takto:

@RequestMapping (hodnota = "/ zamestnanci", produkuje = "aplikácia / json", metóda = RequestMethod.GET) verejný zoznam findEmployees () {...} // poslať požiadavku PUT pomocou CURL $ curl --request PUT // localhost: 8080 / api / zamestnanci {"timestamp": 1539720588712, "status": 405, "error": "metóda nie je povolená", "výnimka": "org.springframework.web.HttpRequestMethodNotSupportedException", "message": "požiadavka metóda 'PUT' nie je podporovaná "," cesta ":" / api / zamestnanci "} 

5. 405 Nepodporuje - Dôvod, Riešenie

V tomto predchádzajúcom scenári dostávame odpoveď HTTP so stavovým kódom 405 - chyba klienta, ktorá naznačuje, že server nepodporuje metódu / sloveso odoslané v žiadosti.

Ako tu naznačuje názov, dôvodom tejto chyby je odoslanie žiadosti nepodporovanou metódou.

Ako môžete očakávať, môžeme to vyriešiť definovaním explicitného mapovania pre PUT v existujúcom mapovaní metódy:

@RequestMapping (hodnota = "/ zamestnanci", produkuje = "aplikácia / json", metóda = {RequestMethod.GET, RequestMethod.PUT}) ...

Alternatívne môžeme novú metódu / mapovanie definovať osobitne:

@RequestMapping (hodnota = "/ zamestnanci", produkuje = "aplikácia / json", metóda = RequestMethod.PUT) verejný zoznam postEmployees () ... 

6. Záver

Metóda / sloveso požiadavky je kritickým aspektom v komunikácii HTTP a musíme byť opatrní s presnou sémantikou operácií, ktoré definujeme na strane servera, a potom s presnými požiadavkami, ktoré zasielame.

A ako vždy sú príklady uvedené v tomto článku k dispozícii na stránkach GitHub.


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