捣鼓了快一天时间翻了很多别人的文章。
也发现了很多人写东西根本不负责任。明明错的自己没去试过还是转载了。导致我也浪费了很多时间。
所以我决定以后自己遇到问题自己记录下来。
开始说下问题。前台用ajax发送post请求。后台怎么也接受不到。
java代码:
function phoneValidate(phone){
var flag = false;
$.ajax({
type:"post",
contentType : "application/json; charset=utf-8",
data: JSON.stringify({'phone':phone}),
url:"phoneInUse.go",
dataType: "json",
async: false,
success:function(result){
result = eval(result);
if(result.valid){
flag = true;
}
else{
alert(result.message);
flag = false;
}
}
});
return flag;
}
后台代码:
/** 手机号是否已经被注册*/
@RequestMapping(value = "/phoneInUse", method=RequestMethod.POST, produces="application/json; charset=utf-8")
public String phoneInUse(@RequestParam(value = "phone", required = true) String phone){
try {
User user = userService.getUserByPhone(phone);
if (user != null && user.getId() != null) {
return "{\"valid\":false,\"message\":\"手机号已被占用!\"}";
}
} catch (Exception e) {
log.error("登录名验证失败", e);
e.printStackTrace();
return "{\"valid\":false,\"message\":\"网站程序错误!\"}";
}
return "{\"valid\":true}";
}
问题出在:@RequestParam 不能接收 contentType : "application/json; charset=utf-8" 的请求。
如果后台必须要用@RequestParam,
前台2个地方必须改:
1、contentType 改为 "application/x-www-form-urlencoded"
2、data: 改为{'phone':phone},
也可以不用改前台的js后台的@RequestParam....改为用@RequestBody的对象的形式
