J'utilise printemps MVC. Et je ne peux pas obtenir param de url quand method = post. Mais lorsque je change de méthode pour GET, je peux donc obtenir tous les paramètres.
Ceci est ma forme:
<form method="POST" action="http://localhost:8080/cms/customer/create_customer" id="frmRegister" name ="frmRegister" enctype="multipart/form-data">
<input class ="iptRegister" type="text" id="txtEmail" name="txtEmail" value="" />
<input class ="iptRegister" type="password" id="txtPassword" name="txtPassword" value="" />
<input class ="iptRegister" type="text" id="txtPhone" name="txtPhone" value="" />
<input type="button" id="btnRegister" name="btnRegister" value="Register" onclick="" style="cursor:pointer"/>
</form>
Ceci est mon contrôleur:
@RequestMapping(value= "/create_customer", method = RequestMethod.POST)
@ResponseBody
public String createCustomer(HttpServletRequest request,
@RequestParam(value="txtEmail", required=false) String email,
@RequestParam(value="txtPassword", required=false) String password,
@RequestParam(value="txtPhone", required=false) String phone){
ResultDTO<String> rs = new ResultDTO<String>();
rs.setStatus(IConfig.SHOW_RESULT_SUCCESS_ON_MAIN_SCREEN);
try{
Customer c = new Customer();
c.setEmail(email);
c.setPassword(password);
c.setPhone(phone);
customerService.insert(c);
rs.setData("Insert success");
}catch(Exception ex){
log.error(ex);
rs.setStatus(IConfig.SHOW_RESULT_ERROR_ON_MAIN_SCREEN);
rs.setData("Insert failure");
}
return rs.toString();
}
Comment puis-je résoudre ce problème?
Les annotations de printemps fonctionneront bien si vous supprimez enctype="multipart/form-data"
.
@RequestParam(value="txtEmail", required=false)
Vous pouvez même obtenir les paramètres de l'objet request
.
request.getParameter(paramName);
Utilisez un formulaire dans le cas où le nombre d'attributs est grand. Ce sera pratique. Tutoriel pour vous aider à démarrer.
Configurez le résolveur en plusieurs parties si vous souhaitez recevoir enctype="multipart/form-data"
.
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="250000"/>
</bean>
Reportez-vous à la documentation Spring .
Quand je veux avoir tous les POST j'utilise le code ci-dessous,
@RequestMapping(value = "/", method = RequestMethod.POST)
public ViewForResponseClass update(@RequestBody AClass anObject) {
// Source..
}
J'utilise le @RequestBody
annotation pour les requêtes http post/put/delete au lieu du @RequestParam
qui lit les paramètres GET.
Cela fonctionne aussi si vous changez le type de contenu
<form method="POST"
action="http://localhost:8080/cms/customer/create_customer"
id="frmRegister" name="frmRegister"
enctype="application/x-www-form-urlencoded">
Dans le contrôleur, ajoutez également la valeur d'en-tête comme suit:
@RequestMapping(value = "/create_customer", method = RequestMethod.POST, headers = "Content-Type=application/x-www-form-urlencoded")
Tu devrais utiliser @RequestParam
sur ces ressources avec la méthode = RequestMethod.GET
Pour pouvoir publier des paramètres, vous devez les envoyer en tant que corps de la demande. Un corps comme JSON ou une autre représentation de données dépendrait de votre implémentation (je veux dire, consommer et produire MediaType
).
Typiquement, multipart/form-data est utilisé pour télécharger des fichiers.