当前位置: 首页 > news >正文

SpringBoot速成(11)更新用户头像,密码P13-P14

更新头像:

1.代码展示:

1.@RequestParam 是 Spring MVC 中非常实用的注解,用于从 HTTP 请求中提取参数并绑定到控制器方法的参数上。

2.@PatchMapping 是 Spring MVC 中的一个注解,用于处理 HTTP 的 PATCH 请求。PATCH 请求通常用于对资源的部分更新,而不是像 PUT 请求那样对资源进行完全替换。

在你的例子中,@PatchMapping("updateAvatar") 表示这个方法会处理路径为 /updateAvatarPATCH 请求。

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);

报错:?????????????????????????

相关文章:

  • 八.工控之视觉专题
  • pandas(13 Caveats Gotchas和SQL比较)
  • 【Three.js】JS 3D library(一个月进化史)
  • 1-14 Merge与rebase操作
  • Swift CChar元祖转String
  • 12-罗马数字转整数
  • DeepSeek R1 与 OpenAI O1:机器学习模型的巅峰对决
  • python(1)-元组和集合
  • linux-centos nginx 添加stream模块
  • Map和Set
  • FunPapers[2]:www‘24 「快手」连续特征单调性建模
  • 【RocketMQ 存储】消息重放服务-ReputMessageService
  • Java与DeepSeek的完美结合:开启高效智能编程新时代 [特殊字符]
  • JavaSE:数组
  • Pygame中自定义事件处理的方法2-2
  • Linux-文件IO
  • 蓝桥杯篇---8位 ADC/DAC转换芯片 PCF8591
  • AtCoder Beginner Contest 393 —— E - GCD of Subset 补题 + 题解 python
  • 2025-02-16 学习记录--C/C++-PTA 7-21 求特殊方程的正整数解
  • 【css】超过文本显示省略号
  • 俄外长与美国务卿通电话,讨论俄美接触等问题
  • 流失79载,国宝文物“子弹库帛书”(二、三卷)回归祖国
  • 侵害孩子者,必严惩不贷!3名性侵害未成年人罪犯今日执行死刑
  • 昆明公布3起经济犯罪案例:一人持有820余万假美元被判刑十年
  • 复原展出孙吴大墓,江苏首座考古博物馆将开放
  • 92岁上海交大退休教师捐赠百万元给学校,其父也曾设奖学金