Spring MVC annoté méthodes de contrôleur, incapable de trouver “la” méthode pour l'opération de SUPPRESSION
Voici le code:
@RequestMapping(value = "/competitors/{id}", method = RequestMethod.GET)
public Competitor getCompetitor(@PathVariable("id") long id)
{
Competitor competitor = competitorService.getCompetitorById(id);
if (null == competitor)
{
EmptyResultDataAccessException e = new EmptyResultDataAccessException(1);
logger.log(Level.WARN, e.getMessage());
throw e;
}
return competitor;
}
@RequestMapping(value = "/competitors/{id}", method = RequestMethod.DELETE)
public String deleteCompetitor(@PathVariable("id") long id)
{
Competitor competitor = new Competitor();
competitor.setId(id);
competitorService.deleteCompetitor(competitor);
return "Solid gone!";
}
L'envoi d'une demande de SUPPRESSION de /concurrents/200 résultats dans l'erreur:
"HTTP Statut 405 - Demande de la méthode "SUPPRIMER" non pris en charge"
L'enregistrement à partir du Printemps confirme qu'aucune route à cette méthode peut être trouvé:
5559 [tomcat-http--3] DEBUG org.springframework.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcher' processing DELETE request for [/vrsboserver/competitors/200] 5562 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
- Matching patterns for request [/competitors/200] are [/competitors/{id}] 5565 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
- Mapping [/competitors/200] to handler 'com.gtspt.vrsboserver.controllers.CompetitorController@4fe7f80' 5565 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.WebContentInterceptor - Looking up cache seconds for [/competitors/200] 5565 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.WebContentInterceptor - Applying default cache seconds to [/competitors/200] 5566 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver
- Resolving exception from handler [com.gtspt.vrsboserver.controllers.CompetitorController@4fe7f80]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported 5567 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver
- Resolving exception from handler [com.gtspt.vrsboserver.controllers.CompetitorController@4fe7f80]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported 5568 [tomcat-http--3] DEBUG org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
- Resolving exception from handler [com.gtspt.vrsboserver.controllers.CompetitorController@4fe7f80]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'DELETE' not supported 5568 [tomcat-http--3] WARN org.springframework.web.servlet.PageNotFound - Request method 'DELETE' not supported
À laquelle ma réponse est "BU?".
Tous sont de votre Ressort pots de la même version?
Juste pour être sûr, vous avez vérifié que l'un fonctionne sur le même mapping?
OBTENEZ fonctionne bien. Maven est l'obtention de mon Ressort pots, à l'aide de "${org.springframework.version}" comme chaque champ version, alors qu'ils sont certainement tous de correspondance.
Basé sur cette info, je suis perplexe. Assurez-vous de vérifier votre efficace pom comme vous l'avez peut-être tirer dans une transitive Printemps dep sans utiliser votre version de propriété. Si j'ai travaillé avec vous, je voudrais vous demander de vous repousser ce que je puisse debug.
Mise à niveau à partir du Printemps 3.0.0 de Printemps 3.1.0 a comme par magie fixe.
Juste pour être sûr, vous avez vérifié que l'un fonctionne sur le même mapping?
OBTENEZ fonctionne bien. Maven est l'obtention de mon Ressort pots, à l'aide de "${org.springframework.version}" comme chaque champ version, alors qu'ils sont certainement tous de correspondance.
Basé sur cette info, je suis perplexe. Assurez-vous de vérifier votre efficace pom comme vous l'avez peut-être tirer dans une transitive Printemps dep sans utiliser votre version de propriété. Si j'ai travaillé avec vous, je voudrais vous demander de vous repousser ce que je puisse debug.
Mise à niveau à partir du Printemps 3.0.0 de Printemps 3.1.0 a comme par magie fixe.
OriginalL'auteur Archeus | 2012-03-23
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème. Ce qui aide et ce n'est probablement pas la solution finale, mais travaille pour moi:
Modifier des annotations et des paramètres de la méthode deleteCompetitors. Supprimer l'id (paramètre méthode de trop). Lire la id paramètre de HttpServletRequest.
Le paramètre id est passé par la tête de cette façon (code de la client - pas complète):
Je suis en utilisant Apache HttpClient.
OriginalL'auteur fmelan
Normal navigateur ne support get /post.
Printemps résolu ce problème en utilisant un paramètre caché, pour l'activer, ajoutez ci-dessous pour votre web.xml:
OriginalL'auteur Jianyu
Essayez de la modifier à
method = RequestMethod.GET
et voir si cela fonctionne.Comment êtes-vous en train de dire au navigateur de faire une demande de SUPPRESSION? Où est cet en-tête set? Comme dans ce lien: ibm.com/developerworks/webservices/library/wa-restful/...
Utilisez-vous la méthode=SUPPRIMER dans votre formulaire? Je suis curieux, parce que honnêtement, je ne sais pas.
Oui, comment êtes-vous tester ? Vous pouvez utiliser cette Extension Google pour tester les requêtes REST : chrome.google.com/webstore/detail/...
Je suis l'aide de cet addon pour Firefox: addons.mozilla.org/en-US/firefox/addon/restclient - le type de demande est certainement être correctement définie dans l'en-tête.
OriginalL'auteur duffymo
Avez-vous essayé ce http://www.codereye.com/2010/12/configure-tomcat-to-accept-http-put.html? Cela ne fonctionne bien sûr de vous sont en cours d'exécution sur Tomcat. Il semble que la plupart des serveurs d'application ont désactivé la possibilité de METTRE la poignée et de la demande de SUPPRESSION par défaut.
Bien sûr, l'activation de ce sera probablement vous exposer à de nouveaux trous de sécurité.
OriginalL'auteur loyalBrown
J'ai rencontré ce problème récemment. Ici sont un couple de mes conclusions/observations:
Je suis en cours d'exécution de tomcat 7.0.42 avec le Printemps 3.2.2
Le message suivant est cracher sur le journal dans tous ces cas. 405 method not Allowed est renvoyée au client.
À l'exception des 3 et 4, le message et la réponse est très trompeur. Il vous envoie vers le bas d'enquête trous de lapins qui finissent infructueuses.
Ce qui a fini par être mon problème, c'est que nous avions une méthode comme ceci:
Il DEVRAIT être ceci:
Voir la différence? C'est le manque ("objectName") après @RequestParam. Il compile et s'exécute correctement dans STS, mais lorsqu'il est déployé sur un serveur tomcat directement, ça ne marche pas.
Grâce à @fmelan pour le poste ci-dessus, car il nous a aidé à trouver cette petite faute de frappe.
Ça ne ressemble pas c'est votre problème, mais pour quelqu'un d'autre qui est coincé à essayer de comprendre pourquoi "SUPPRIMER" n'est pas pris en charge ...
OriginalL'auteur borq