- 接着继续学习。
- 之前的博客的进度:完成用户模块的注册接口的开发以及注册时的参数合法性校验。在基本完成用户模块的登录接口的主逻辑的基础上,学习了"JWT令牌的组成与使用"、完成了"登录认证"(生成与验证JWT令牌)。也完成了获取用户详细信息接口开发(使用ThreadLocal优化)。具体往回看了解的链接如下。
springboot实战学习(10)(ThreadLoacl优化获取用户详细信息接口)(重写拦截器afterCompletion()方法)_loacalthread springboot-CSDN博客
- 下面开发用户模块的第四个接口——更新用户基本信息。
目录
一、明确需求
(1)更新用户基本信息
- 用户在个人中心,点击基本资料后,在页面的主区域会展示当前用户的详细信息。
- 用户可以修改用户的个人昵称、用户的个人邮箱。
- 当点击"提交修改",从而访问后台的接口去更新当前用户的信息。
- 其中用户的登录名称无法修改(置灰)。因为一旦注册完,不允许修改,用户名唯一。
二、查阅接口文档
(1)请求路径、请求方式
- 因为是更新,所以请求方式用PUT。
PUT请求。
- 当你想更新某个资源时,使用 HTTP 的 PUT 方法是常见的做法。
- PUT方法通常用于完全替换目标资源的当前表示。这与GET方法(用于请求资源)和 POST方法(通常用于创建新资源)有所不同。
(2)请求参数
- 请求参数的格式是JSON格式。
- 注意username(用户名)这个参数不是必须的。
(3)响应数据
- 响应数据的格式是JSON格式。
- 还是和之前一样:"code"、"message"、"data"。
三、分析实现思路
(1)UserController层
(I)方法外
- 在UserController中添加一个"更新"方法。并且在方法上添加注解@PutMapping()。请求路径"/update"。
- 其次,浏览器会携带"id"、"username"、"nickname"、"email"这样的数据,并且是在请求体中以JSON格式的携带过去。
- 所以可以把这些数据封装到实体类对象"user"里面进行接收。
- 其次为了让框架能够自动的把请求体里的JSON数据给我们转换成实体类对象。所以需要在方法中的参数前面添加一个注解@RequestBody。
(II)方法内
- 调用UserService层里面提供的更新方法,完成"更新"操作即可。
(III)其它层
- 所以UserService层需要提供"更新"相关的方法
- UserMapper层也需要执行对应的SQL语句。而且在这里注意并没有去更新"username"(用户名不能修改)。并且有一个"update_time"字段需要更新。
四、完成代码书写
(1)UserController层
@PutMapping("/update") public Result update(@RequestBody User user){ userService.update(user); return Result.success(); }
(2)UserService层
(I)接口(UserService)
//更新 void update(User user);
(II)实现类(UserServiceImpl)
@Override public void update(User user) { //设置更新时间 user.setUpdateTime(LocalDateTime.now()); userMapper.update(user); }
(3)UserMapper层
//更新 @Update("update user set nickname=#{nickname},email=#{email},update_time=#{updateTime} where id =#{id}") void update(User user);
五、postman测试程序
(1)写好所需主逻辑,重启工程。
(2)打开postman测试接口。
(3)查看当前数据库表中已经注册的用户。
(也就是查看其id,然后拿去测试"更新"操作)
(4)点击测试,发现问题(需要登录认证)
- 重新登录,获取最新JWT令牌,然后赋值给请求头。
- 请求头:Authorization。
- 再次测试。
- 成功更新数据库用户表(user)里面的对应字段。