此接口是用户登陆后修改个人信息的接口,其中用户的Id和用户名是不允许修改的controller
:
//更新个人用户信息
@RequestMapping(value = "update_information.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse<User> update_information(HttpSession session,User user){
//防止越权问题,我们将传过来的用户Id设置为Session里面获取当前登录用户的Id
User currentUser= (User) session.getAttribute(Const.CURRENT_USER);
if(currentUser==null){
return ServerResponse.createByErrorMessage("用户未登录");
}
//设置userId和username是不能被修改的
user.setId(currentUser.getId());
user.setUsername(currentUser.getUsername());
ServerResponse<User> response= iUserService.updateInformation(user);
if(response.isSuccess()){
session.setAttribute(Const.CURRENT_USER,response.getData());
}
return response;
}
server
:
//修改个人信息
ServerResponse<User> updateInformation(User user);
serverImpl
:
//修改个人信息
public ServerResponse<User> updateInformation(User user){
//username是不能被更新的
//email也要进行校验,校验新的email是不是已经存在,如果当存在相同的email的话,不能是我们当前的用户的
int resuletCount=userMapper.checkEmailByUserId(user.getEmail(),user.getId());
if(resuletCount>0){
return ServerResponse.createByErrorMessage("邮箱已被使用,请更换后重试");
}
User updateUser=new User();
updateUser.setId(user.getId());
updateUser.setEmail(user.getEmail());
updateUser.setPhone(user.getPhone());
updateUser.setQuestion(user.getQuestion());
updateUser.setAnswer(user.getAnswer());
int updateCount=userMapper.updateByPrimaryKeySelective(updateUser);
if(updateCount>0){
return ServerResponse.createBySuccess("更行个人信息成功",updateUser);
}
return ServerResponse.createByErrorMessage("更新个人信息失败,请稍后重试");
}
Mapper
:
更新新的Mapper可以直接用逆向工程生成的工具,直接调用即可,故而Mapper.xml
也是我们不用修改的。
下面,我们来介绍下上面serverImpl
代码中根据用户的Id来校验邮箱是否可用:
email进行校验,校验新的email是不是已经存在,如果当存在相同的email的话,不能是我们当前的用户的,Mapper
:
/根据用户的Id查询邮箱是否可用
int checkEmailByUserId(@Param("email") String email, @Param("userId") Integer userId);
Mapper.xml
<select id="checkEmailByUserId" resultType="int" parameterType="map" >
select count(1) from mmall_user
where email = #{email}
and id != #{userId}
</select>
接口测试:
测试邮箱不可用(即使用原邮箱)
换个邮箱测试: