D'État HTTP 405 - Demande de la méthode "POST" pas pris en charge (Spring MVC)
Im obtenir cette erreur: HTTP Status 405 - Request method 'POST' not supported
Ce que je suis en train de faire, c'est de faire un formulaire avec une liste déroulante qui se rempli en fonction de la valeur sélectionnée dans un autre menu déroulant. Par exemple lorsque je sélectionne un nom dans le customerName
zone de la onChange
fonction dans les .page jsp doit être exécuté et la page présentée, alors chargé à nouveau avec les valeurs correspondantes dans le customerCountry
boîte.
cependant, je suis l'obtention de ce Statut HTTP 405 erreur. J'ai cherché sur internet une solution, mais qui n'ont pas été en mesure de trouver quelque chose qui a aidé. Voici les parties pertinentes de mon code:
partie de la page jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
.error { color: red; }
</style>
<script>
function repopulate(){
document.deliveryForm.submit();
}
function setFalse(){
document.getElementById("hasId").value ="false";
document.deliveryForm.submit();
//document.submitForm.submit(); (This was causing the error)
}
</script>
</head>
<body>
<h1>Create New Delivery</h1>
<c:url var="saveUrl" value="/test/delivery/add" />
<form:form modelAttribute="deliveryDtoAttribute" method="POST" action="${saveUrl}" name="deliveryForm">
<table>
<tr>
<td><form:hidden id="hasId" path="hasCustomerName" value="true"/></td>
</tr>
<tr>
<td>Customer Name</td>
<td><form:select path="customerName" onChange="repopulate()">
<form:option value="" label="--- Select ---" />
<form:options items="${customerNameList}" />
</form:select>
</td>
<td><form:errors path="customerName" cssClass="error" /></td>
</tr>
<tr>
<td>Customer Country</td>
<td><form:select path="customerCountry">
<form:option value="" label="--- Select ---" />
<form:options items="${customerCountryList}" />
</form:select>
</td>
<td><form:errors path="customerCountry" cssClass="error" /></td>
</tr>
</form:form>
<form:form name="submitForm">
<input type="button" value="Save" onClick="setFalse()"/>
</form:form>
</body>
</html>
partie de contrôleur:
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String getDelivery(ModelMap model) {
DeliveryDto deliveryDto = new DeliveryDto();
model.addAttribute("deliveryDtoAttribute", deliveryDto);
model.addAttribute("customerNameList",
customerService.listAllCustomerNames());
model.addAttribute("customerCountryList", customerService
.listAllCustomerCountries(deliveryDto.getCustomerName()));
return "new-delivery";
}
//I want to enter this method if hasId=true which means that a value in the CustomerName
//drop down list was selected. This should set the CountryList to the corresponding values
//from the database. I want this post method to be triggered by the onChange in the jsp page
@RequestMapping(value = "/add", method = RequestMethod.POST, params="hasCustomerName=true")
public String postDelivery(
@ModelAttribute("deliveryDtoAttribute") DeliveryDto deliveryDto,
BindingResult result, ModelMap model) {
model.addAttribute("deliveryDtoAttribute", deliveryDto);
model.addAttribute("customerNameList",
customerService.listAllCustomerNames());
model.addAttribute("customerCountryList", customerService
.listAllCustomerCountries(deliveryDto.getCustomerName()));
return "new-delivery";
}
//This next post method should only be entered if the save button is hit in the jsp page
@RequestMapping(value = "/add", method = RequestMethod.POST, params="hasCustomerName=false")
public String postDelivery2(
@ModelAttribute("deliveryDtoAttribute") @Valid DeliveryDto deliveryDto,
BindingResult result, ModelMap model) {
if (result.hasErrors()) {
model.addAttribute("deliveryDtoAttribute", deliveryDto);
model.addAttribute("customerNameList",
customerService.listAllCustomerNames());
model.addAttribute("customerCountryList", customerService
.listAllCustomerCountries(deliveryDto.getCustomerName()));
return "new-delivery";
} else {
Delivery delivery = new Delivery();
//Setters to set delivery values
return "redirect:/mis/home";
}
}
Comment ai-je reçois ce message d'erreur? Toute aide serait grandement appréciée! Grâce
EDIT: Changé hasId
à hasCustomerName
. J'ai toujours l' HTTP Status 405 - Request method 'POST' not supported
erreur.
EDIT2: Commenté la ligne dans le setFalse
fonction qui était la cause de l'erreur
//D
pour les personnes de frapper cette question et à venir sur cette page, vérifiez également que l'action définie frappe un point de terminaison existant, qui a été mon problème 🙂
OriginalL'auteur dlinx90 | 2012-06-21
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr si cela aide, mais j'ai eu le même problème.
Vous utilisez springSecurityFilterChain avec protection CSRF. Cela signifie que vous devez envoyer un jeton lorsque vous envoyez le formulaire par la POSTE la demande. Essayez d'ajouter l'entrée suivante à votre formulaire:
Comment faire pour désactiver ce filtre de la chaîne d'temperately? parce que ont donc beaucoup de méthodes pour changer, je le veux premières œuvres, puis mettre à jour progressivement
vous pouvez le trouver dans le Ressort de Sécurité de référence, chapitre 18.4.2 docs.printemps.io/printemps-sécurité/site/docs/current/reference/html/...
OriginalL'auteur Ashish
Vérifier si vous retournez un @ResponseBody ou un @ResponseStatus
J'ai eu un problème similaire. Mon Contrôleur ressemblait à ça:
Lors de l'appel avec une requête POST j'ai toujours eu l'erreur suivante:
D'État HTTP 405 - Demande de la méthode "POST" pas pris en charge
Après un certain temps, j'ai compris que la méthode a été effectivement appelé, mais parce qu'il n'y a pas de @ResponseBody et pas @ResponseStatus Spring MVC déclenche l'erreur.
Pour corriger cela il suffit d'ajouter un @ResponseBody
ou un @ResponseStatus à votre méthode.
OriginalL'auteur RenRen
Vous pourriez avoir besoin de changer la ligne
à
OriginalL'auteur harshit
Le problème, c'est que votre contrôleur s'attendre à un paramètre hassid=false ou hassid=true, mais vous n'êtes pas en passant. Votre champ caché a l'id hassid mais il est passé comme hasCustomerName, donc pas de cartographie des matchs.
Modifier le chemin d'accès du champ caché pour hassid ou la cartographie paramètre de s'attendre à ce hasCustomerName=true ou hasCustomerName=false.
Comment se fait le message d'erreur est si trompeur ? Il nous conduit à penser que c'est un verbe HTTP problème, alors qu'en fait c'est un paramètre.
OriginalL'auteur Roger Lindsjö
J'ai trouvé le problème qui causait l'erreur HTTP.
Dans le
setFalse()
fonction qui est déclenché par le bouton Enregistrer mon code a été d'essayer de soumettre le formulaire qui contient le bouton.quand j'enlève le
document.submitForm.submit();
cela fonctionne:@Roger Lindsjö Merci pour repérer mon erreur où je n'étais pas passer sur le droit de paramètre!
OriginalL'auteur dlinx90