web-dev-qa-db-fra.com

Spring, la méthode de requête 'POST' n'est pas supportée

Tout d’abord, dites des excuses pour poser cette question répétée.

En fait, dans mon application printanière, j'ai user.jsp et professional.jsp

voici mon User.jsp:

  <form:form action="profile/user" modelAttribute="profile">
    <div>
        <jsp:include page="professional.jsp"></jsp:include>
    </div>

</form:form>

Et voici mon professional.jsp:

   <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://Java.Sun.com/jsp/jstl/core"%>

<fieldset id="profile_proffiesional">
    <form:form action="profile/proffiesional" modelAttribute="PROFESSIONAL" method="POST">
        <p>
            <label for="position">Position</label>
            <form:input path="position" tabindex="4" />
        </p>
        <p>
            <label for="location">Location</label>
            <form:input path="location" tabindex="5" />
        </p>
        <p>
            <label for="description">Description</label>
            <form:input path="description" tabindex="5" />
        </p>
        <p>
            <input type="submit" value="Add">
        </p>
    </form:form>
</fieldset>

Et voici ma classe de contrôleur:

    @Controller
@RequestMapping(value = "profile")
public class UserProfileController {

    @Autowired
    private UserService userService;

    @Autowired
    private SessionData sessionData;

    @RequestMapping(value = "user", method = RequestMethod.GET)
    public String user(Model model) throws Exception {
        model.addAttribute("PROFESSIONAL", new UserProfessionalForm());
        model.addAttribute("EDUCATIONAL", new UserEducationalForm());
        model.addAttribute("AWARDS", new UserAwardsForm());
        return "profile/user";
    }

    @RequestMapping(value = "proffessional", method = RequestMethod.POST)
    public @ResponseBody
    String forgotPassword(UserProfessionalForm professionalForm,
            BindingResult result, Model model) {

        UserProfileVO userProfileVO = new UserProfileVO();
        userProfileVO.setUser(sessionData.getUser());
        userService.saveUserProfile(userProfileVO);
        model.addAttribute("professional", professionalForm);
        return "Your Professional Details Updated";
    }
}

Problem est quand nous sommes Cliquez sur le bouton Add dans professional.jsp, il n'y a pas de réponse dans la console du serveur mais en dessous du message d'avertissement affiché:

  29 Mar, 2013 1:03:51 PM org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported

Pourquoi cet avertissement arrive? je suis déjà spécifié method = "POST" ..

S'il vous plaît aider ..

17
user1573503

Votre user.jsp:

 <form:form action="profile/proffesional" modelAttribute="PROFESSIONAL">
     ---
     ---
    </form:form>

Dans votre classe de contrôleur:

(Faites-le comme un nom complet de méthode .. Ecoutez, je pense que vous êtes insérer un enregistrement dans la base de données.)

@RequestMapping(value = "proffessional", method = RequestMethod.POST)
    public @ResponseBody
    String proffessionalDetails(
            @ModelAttribute UserProfessionalForm professionalForm,
            BindingResult result, Model model) {

        UserProfileVO userProfileVO = new UserProfileVO();

        userProfileVO.setUser(sessionData.getUser());
        userService.saveUserProfile(userProfileVO);
        model.addAttribute("PROFESSIONAL", professionalForm);

        return "Your Professional Details Updated";

    }
5
Java Developer

Csrf étant activé dans mon fichier XML de sécurité sprint, je viens d'ajouter une ligne dans le formulaire:

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 

De cette façon, j'ai pu soumettre le formulaire avec l'attribut model.

7
Pankaj

En Jsp:

action="profile/proffiesional"

Dans le contrôleur

@RequestMapping(value = "proffessional", method = RequestMethod.POST)

Orthographe MisMatch!

7
Pheonix

Vous êtes une annotation missimg @ModelAttribute pour UserProfessionalForm professionalForm dans la méthode forgotPassword.

@RequestMapping(value = "proffessional", method = RequestMethod.POST)
public @ResponseBody
String forgotPassword(@ModelAttribute UserProfessionalForm professionalForm,
        BindingResult result, Model model) {

    UserProfileVO userProfileVO = new UserProfileVO();
    userProfileVO.setUser(sessionData.getUser());
    userService.saveUserProfile(userProfileVO);
    model.addAttribute("professional", professionalForm);
    return "Your Professional Details Updated";
}
3
Arun P Johny

Essaye ça 

@RequestMapping(value = "proffessional", method = RequestMethod.POST)
    public @ResponseBody
    String forgotPassword(@ModelAttribute("PROFESSIONAL") UserProfessionalForm professionalForm,
            BindingResult result, Model model) {

        UserProfileVO userProfileVO = new UserProfileVO();
        userProfileVO.setUser(sessionData.getUser());
        userService.saveUserProfile(userProfileVO);
        model.addAttribute("professional", professionalForm);
        return "Your Professional Details Updated";
    }
1
Kris

Pour information, j'ai supprimé l'attribut d'action et j'ai obtenu cette erreur lorsque j'appelle un message ajax .. Même si mon attribut d'action dans le formulaire ressemble à ceci action="javascript://;" 

Je pensais l'avoir reçu de l'appel ajax et de la sérialisation du formulaire, mais j'ai ajouté l'attribut d'action fictif au formulaire et cela a fonctionné.

1
Lucky