捣鼓了快一天时间翻了很多别人的文章。
也发现了很多人写东西根本不负责任。明明错的自己没去试过还是转载了。导致我也浪费了很多时间。
所以我决定以后自己遇到问题自己记录下来。
开始说下问题。前台用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的对象的形式