SpringBoot速成(11)更新用户头像,密码P13-P14
更新头像:
1.代码展示:
1.
@RequestParam
是 Spring MVC 中非常实用的注解,用于从 HTTP 请求中提取参数并绑定到控制器方法的参数上。2.
@PatchMapping
是 Spring MVC 中的一个注解,用于处理 HTTP 的PATCH
请求。PATCH
请求通常用于对资源的部分更新,而不是像PUT
请求那样对资源进行完全替换。在你的例子中,
@PatchMapping("updateAvatar")
表示这个方法会处理路径为/updateAvatar
的PATCH
请求。
UserServiceImpl:
@Override
public void updateAvatar(String avatarUrl) {
Map<String,Object> map= ThreadLocalUtil.get();
Integer id= (Integer) map.get("id");
userMapper.updateAvater(avatarUrl,id);
}
UserMapper:
@Update("update user set userPic=#{userPic},updateTime=now() where id=#{id}")
void updateAvater(String avatarUrl, Integer id);
报错 :
//更新头像
@Update("update user set userPic=#{userPic},updateTime=#{updateTime} where id=#{id}")
void updateAvater(String avatarUrl, Integer id);
@Override
public void updateAvatar(String avatarUrl) {
Map<String,Object> map= ThreadLocalUtil.get();
Integer id= (Integer) map.get("id");
userMapper.updateAvater(avatarUrl,id);
}
@里边写的是 updateAvater()参数中能得到的东西
修改:updateTime=now()
正确举例:
//更新信息
@Update("update user set nickname=#{nickname},email=#{email},updateTime=#{updateTime} where id=#{id}")
void update(User user);
@Override
public void update(User user) {
user.setUpdateTime(LocalDateTime.now());
userMapper.update(user);
}
Map<String,Object> map=JwtUtil.parseToken(token);与Map<String,Object> map=ThreadLocalUtil.get();的区别:前者需要在Controller类中方法的参数上写上
@RequestHeader(name="Authorization") String token
2.参数校验:
检验是否是一个合法的URL:
@URL:
局限性:只能判断有无@,则若写123@qq,也会通过
Controller:
@PatchMapping("updateAvatar")
public Result updateAvatar(@RequestParam @URL String avatarUrl) {
userService.updateAvatar(avatarUrl);
return Result.success();
}
更新密码:
1.
@RequestBody
是Spring MVC中用于绑定HTTP请求体的注解。它将请求体中的JSON、XML等格式的数据自动转换为Java对象或集合。//更新用户信息 @PutMapping("/update") public Result update(@RequestBody User user){ userService.update(user); return Result.success(); }2.
@RequestParam
是 Spring MVC 中的一个注解,用于将请求参数(通常是 URL 中的查询参数或表单数据)绑定到方法的参数上。3.代码局限性:新密码没有判断是否符合要求;新旧密码不能一致;更新密码后应自动跳转登陆页面,重新登陆(前端)
代码展示:
userController:
//更新用户密码
@PatchMapping("/updatePwd")
public Result updatePwd(@RequestBody Map<String,String> params){
String oldpwd = params.get("old_pwd");
String newpwd = params.get("new_pwd");
String repwd = params.get("re_pwd");
//没输全
if(StringUtils.hasLength(oldpwd)||StringUtils.hasLength(newpwd)||StringUtils.hasLength(repwd)){
return Result.error("缺少必要参数");
}else{
Map<String,Object> map=ThreadLocalUtil.get();
String username= (String) map.get("username");
User loginUser=userService.findByUserName(username);
//输全
//判断输入是否合法
if(loginUser.getPassword().equals(MailUtil1.getMD5String(oldpwd))){
//判读oldpwd和加密过的密码(即根据username得到的密码)是否相同
return Result.error("原密码输入不正确");
}
if(!repwd.equals(newpwd)){
return Result.error("新密码不一致");
}
}
//完全合法,将新密码输入表中
userService.updatePwd(newpwd);
return Result.success();
}
userServiceImpl:
@Override
public void updatePwd(String newpwd) {
Map<String,Object> map=ThreadLocalUtil.get();
Integer id= (Integer) map.get("id");
userMapper.updatePwd(MailUtil1.getMD5String(newpwd),id);//表中的是加密过的密码
}
userMapper:
@Update("update user set password=#{pmd5String},updateTime=now() where id=#{id}")
void updatePwd(String md5String, Integer id);