更新头像:
1.代码展示:
1.
@RequestParam
是 Spring MVC 中非常实用的注解,用于从 HTTP 请求中提取参数并绑定到控制器方法的参数上。2.
@PatchMapping
是 Spring MVC 中的一个注解,用于处理 HTTP 的PATCH
请求。PATCH
请求通常用于对资源的部分更新,而不是像PUT
请求那样对资源进行完全替换。在你的例子中,
@PatchMapping("updateAvatar")
表示这个方法会处理路径为/updateAvatar
的PATCH
请求。
UserServiceImpl:
@Overridepublic 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);@Overridepublic 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);@Overridepublic 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:
@Overridepublic 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);