Как получить параметр в методе post spring mvc?
Я использую spring mvc. И я не могу получить param из url, когда method = post. Но когда я меняю метод на GET, я могу получить все параметры.
Это моя форма:
<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>
Это мой контроллер:
@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();
}
Как я могу это решить?
Ответы
Ответ 1
-
Spring аннотации будут работать отлично, если вы удалите enctype="multipart/form-data"
.
@RequestParam(value="txtEmail", required=false)
-
Вы даже можете получить параметры из объекта request
.
request.getParameter(paramName);
-
Используйте form, если количество атрибутов велико. Это будет удобно. Учебник, чтобы вы начали.
-
Сконфигурируйте распознаватель многочастных частей, если вы хотите получить enctype="multipart/form-data"
.
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="250000"/>
</bean>
Обратитесь к документации Spring.
Ответ 2
Он также работает, если вы измените тип содержимого
<form method="POST"
action="http://localhost:8080/cms/customer/create_customer"
id="frmRegister" name="frmRegister"
enctype="application/x-www-form-urlencoded">
В контроллере также добавьте значение заголовка следующим образом:
@RequestMapping(value = "/create_customer", method = RequestMethod.POST, headers = "Content-Type=application/x-www-form-urlencoded")
Ответ 3
Когда я хочу получить все параметры POST, я использую код ниже,
@RequestMapping(value = "/", method = RequestMethod.POST)
public ViewForResponseClass update(@RequestBody AClass anObject) {
// Source..
}
Я использую аннотацию @RequestBody
для HTTP-сообщений post/put/delete вместо @RequestParam
, которая считывает параметры GET.
Ответ 4
Вы должны использовать @RequestParam
для этих ресурсов с помощью метода = RequestMethod.GET
Чтобы отправлять параметры, вы должны отправить их в качестве тела запроса. Тело, подобное JSON, или другое представление данных будет в зависимости от вашей реализации (я имею в виду, потребляю и создаю MediaType
).
Обычно для загрузки файлов используется multipart/form-datai > .