更新用户基本信息
接口基本信息
请求路径:/user/update
请求方式:PUT
接口描述:该接口用于更新已登录用户的基本信息(除头像和密码)
请求参数
参数名称 | 说明 | 类型 | 是否必须 | 备注 |
---|---|---|---|---|
id | 主键ID | number | 是 | |
username | 用户名 | string | 否 | 5~16位非空字符 |
nickname | 昵称 | string | 是 | 1~10位非空字符 |
邮箱 | string | 是 | 满足邮箱的格式 |
响应数据
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
code | number | 必须 | 响应码, 0-成功,1-失败 | ||
message | string | 非必须 | 提示信息 | ||
data | object | 非必须 | 返回的数据 |
响应数据样例:
{
"code": 0,
"message": "操作成功",
"data": null
}
代码编写
controller层
//更新用户基本信息
@PutMapping("/update")
public Result update(@RequestBody @Validated User user){
userService.update(user);
return Result.success();
}
service层
UserService
//更新
void update(User user);
UserServiceImpl
@Override
public void update(User user) {
user.setUpdateTime(LocalDateTime.now());
userMapper.update(user);
}
Mapper层
@Update("update user set nickname=#{nickname},email=#{email},update_time=#{updateTime} where id=#{id}")
void update(User user);
dao层
@Data
public class User {
@NotNull
private Integer id;//主键ID
private String username;//用户名
@JsonIgnore //让springMVC把当前对象转换成json字符串的时候,忽略password,最终的json字符串中就没有password这个属性了
private String password;//密码
@NotEmpty
@Pattern(regexp = "^\\S{1,10}$")
private String nickname;//昵称
private String email;//邮箱
private String userPic;//用户头像地址
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
更新用户头像
接口基本信息
请求路径:/user/updateAvatar
请求方式:PATCH
接口描述:该接口用于更新已登录用户的头像
响应参数
参数名称 | 说明 | 类型 | 是否必须 | 备注 |
---|---|---|---|---|
avatarUrl | 头像地址 | string | 是 | url地址 |
代码
controller层
//更新用户头像
@PatchMapping("/updateAvatar")
public Result updateAvater(@RequestParam String avatarUrl){
userService.updateAvater(avatarUrl);
return Result.success();
}
Mapper层
@Update("update user set user_pic=#{avaterUrl},update_time=now() where id = #{id}")
void updateAvater(String avaterUrl,Integer id);
但是此时传递的头像地址可能是不正确的,所以我们要进行校验
步骤:在controller中updateAvater方法参数前加上@URL
//更新用户头像
@PatchMapping("/updateAvatar")
public Result updateAvater(@RequestParam @URL String avatarUrl){
userService.updateAvater(avatarUrl);
return Result.success();
}
更新用户密码
接口基本信息
请求路径:/user/updatePwd
请求方式:PATCH
接口描述:该接口用于更新已登录用户的密码
请求参数
参数名称 | 说明 | 类型 | 是否必须 | 备注 |
---|---|---|---|---|
old_pwd | 原密码 | string | 是 | |
new_pwd | 新密码 | string | 是 | |
re_pwd | 确认新密码 | string | 是 |
代码
controller层
//更新用户名密码
@PatchMapping("/updatePwd")
public Result updatePwd(@RequestBody Map<String,String> params){
//1.参数校验
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("缺少必要的参数");
}
//校验原密码是否正确,1.根据用户名拿到原密码,然后再和old_pwd比对
Map<String,Object> map = ThreadLocalUtil.get();
String username = (String) map.get("username");
User loginUser = userService.findByUserName(username);
if(!loginUser.getPassword().equals(Md5Util.getMD5String(oldPwd))){
return Result.error("原密码不正确");
}
//newPwd和repwd是否一样
if(!newPwd.equals(rePwd)){
return Result.error("你的两次填写密码不一样");
}
//2.调用service完成密码更新
userService.updatePwd(newPwd);
return Result.success();
}
Serviceimpl
@Override
public void updatePwd(String newPwd) {
Map<String,Object> map = ThreadLocalUtil.get();
Integer id = (Integer) map.get("id");
userMapper.updatePwd(Md5Util.getMD5String(newPwd),id);
}
Mapper层
@Update("update user set password=#{md5String},update_time=now() where id = #{id}")
void updatePwd(String md5String, Integer id);