我有一个javaEE应用程序,我有一个jquery表单来将用户添加到数据库。我将fiekd值发送到我的Spring控制器,但由于某种原因,数据不会被发送。 有什么问题?
我在日志
中收到以下异常java.lang.IllegalStateException: Could not find @PathVariable [login] in @RequestMapping
表格
<div id="dialog-form" title="Create new user">
<p class="validateTips">All form fields are required.</p>
<form:form action="${pageContext.request.contextPath}/test" method="post">
<fieldset>
<label for="login">Login</label>
<input type="text" name="login" id="login" class="text ui-widget-content ui-corner-all" />
<label for="password">Password</label>
<input type="text" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" />
<label for="email">Email</label>
<input type="text" name="email" id="email" value="" class="text ui-widget-content ui-corner-all" />
</fieldset>
</form:form>
</div>
<button id="create-user">Add user</button>
脚本
$( "#dialog-form" ).dialog({
autoOpen: false,
height: 600,
width: 350,
modal: true,
buttons: {
"Create an account": function() {
var login = $( '#login' );
var email = $( '#email' );
var password = $( '#password' );
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath}/test",
data: "login=" + login + "&email=" + email + "&password="+ password,
success: function(){
$( this ).dialog( "close" );
}
})
控制器
@RequestMapping(value="/test", method=RequestMethod.POST)
@ResponseBody
public void test(@PathVariable String login, @PathVariable String password, @PathVariable String email) {
User user = new User();
user.setLogin(login);
user.setPassword(password);
user.setEmail(email);
userService.create(user);
}
答案 0 :(得分:0)
@PathVariable
用于嵌入URL“REST Style”中的信息。 。e.g,:
@RequestMapping(value="/test/user/{login}/password/{password}/email/{email}", method=RequestMethod.POST)
要读入查询字符串或帖子正文中的常规旧http参数,注释为@RequestParam
,而不是@PathVariable
。
public void test(@RequestParam("login") String login, @RequestParam("password") String password, @RequestParam("email") String email) {
同样在你的ajax中,data
期待数据。如果要将其格式化为查询字符串,则应将其直接附加到URL。把它放在身体里你会做:
data: {login:login ,email: email,password: password}
而不是将其格式化为查询字符串。您也可以在表单标签上使用jQuery的.serialize()
方法轻松发送整个表单,就像单击提交按钮一样。
答案 1 :(得分:-1)
由于它是POST请求,您必须使用@RequestParam而不是@PathVariable
@PathVariable用于GET请求