记一次前端传入对象的问题
后端使用@RequestBody接收
/**
* 用户自主修改密码(前端自己修改session,后端只是负责传入数据库,不会再返回session)
* @param user
* @return
*/
@RequestMapping("updatePassword")
@ResponseBody
public HashMap<String,Object> updatePassword(@RequestBody User user){
HashMap<String,Object> map = new HashMap<String, Object>();
System.out.println(user);
try {
userMapper.updateUserPassword(user);
map.put("status","0");
map.put("msg","更新密码成功");
} catch (Exception e) {
map.put("status","1");
map.put("msg","更新密码失败!");
}
return map;
}
因为使用了这个注解,前端传入的参数必须是json格式:
$.ajax({
url: "${pageContext.request.contextPath}/user/updatePassword",
method: "post",
contentType: "application/json;charset=UTF-8",
data: JSON.stringify(user),
success: function (res) {
if(res.status==0){//修改成功
$.alerts.alert(res.msg+",点击确定返回到主界面","提示","确定",function () {
window.location.href="${pageContext.request.contextPath}/back/index.jsp";
})
}else{
alert(res.msg);
}
}
});
注意data属性这,必须是以json字符串传输,所以不能写成{”user",user}这种是json对象,字符串在两边有单引号。
关于contentType
- contentType 主要设置你发送给服务器的格式,datatype设置你收到服务器数据的格式。
- 在 jquery 的 ajax 中, contentType都是默认的值:application/x-www-form-urlencoded,这种格式的特点就是,name/value 成为一组,每组之间用 & 联接,而 name与value 则是使用 = 连接。
- 复杂的json对象就不能用默认的contentType,因为它无法转成键值对兴许,需要程序员将data手动转成json字符串,然后设置contentType为application/json,这种格式text,将data原封不动的发出去,后端就能收到json数据进行处理。