我正在使用spring mvc。当method = post时,我无法从url获取param。但是当我将方法更改为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();
}
我该如何解决这个问题?
答案 0 :(得分:50)
如果删除enctype="multipart/form-data"
,则弹簧注释将正常工作。
@RequestParam(value="txtEmail", required=false)
您甚至可以从request
对象中获取参数。
request.getParameter(paramName);
如果要接收enctype="multipart/form-data"
,请配置多部分解析程序。
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="250000"/>
</bean>
答案 1 :(得分:8)
如果您更改内容类型
,它也有效 <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")
答案 2 :(得分:8)
当我想获得所有 POST 参数时,我使用的是以下代码,
@RequestMapping(value = "/", method = RequestMethod.POST)
public ViewForResponseClass update(@RequestBody AClass anObject) {
// Source..
}
我使用 @RequestBody
注释来发布/发送/删除http请求,而不是使用读取GET参数的@RequestParam
。
答案 3 :(得分:7)
您应该使用方法@RequestParam
= RequestMethod.GET
要发布参数,您必须将它们作为请求正文发送。像JSON或其他数据表示形式的主体将取决于您的实现(我的意思是,消费并生成MediaType
)。
通常, multipart / form-data 用于上传文件。