实战篇05:更新用户基本信息
一、接口信息
1.1 基本信息
请求路径:/user/update
请求方式:PUT
接口描述:该接口用于更新已登录用户的基本信息(除头像和密码)
1.2 请求参数
请求参数格式:application/json
请求参数说明:
参数名称 | 说明 | 类型 | 是否必须 | 备注 |
---|---|---|---|---|
id | 主键ID | number | 是 | |
username | 用户名 | string | 否 | 5~16位非空字符 |
nickname | 昵称 | string | 是 | 1~10位非空字符 |
邮箱 | string | 是 | 满足邮箱的格式 |
请求数据样例:
{
"id":5,
"username":"wangba",
"nickname":"wb",
"email":"wb@itcast.cn"
}
1.3 响应数据
响应数据类型:application/json
响应参数说明:
名称 | 类型 | 是否必须 | 默认值 | 备注 | 其他信息 |
---|---|---|---|---|---|
code | number | 必须 | 响应码, 0-成功,1-失败 | ||
message | string | 非必须 | 提示信息 | ||
data | object | 非必须 | 返回的数据 |
响应数据样例:
{
"code": 0,
"message": "操作成功",
"data": null
}
二、业务流程
- 前端使用Put提交修改信息,参数中使用注解@RequestBody User user,将前端返回的数据封装成user对象进行输入参数使用
- Service层和Mapper层提供update方法供Controller层进行使用
三、编写Controller
@PutMapping("/update")
public Result update(@RequestBody User user){
userService.update(user);
return Result.success();
}
四、实现Service的update方法
4.1、在UserService接口类中声明update方法
public interface UserService {
// 根据用户名查询用户
User findByUserName(String username);
// 注册
void register(String username, String password);
// 更新
void update(User user);
}
4.2、在UserviceImpl实现类中实现update方法
获取当前的修改时间,并进行更新
@Override
public void update(User user) {
user.setUpdateTime(LocalDateTime.now());
userMapper.update(user);
}
五、实现Mapper的update方法
@Mapper
public interface UserMapper {
// 根据用户名进行查询
@Select("select * from user where username=#{username}")
User findByUserName(String username);
// 添加
@Insert("insert into user (username,password,create_time,update_time) " +
"values (#{username},#{md5String},now(),now())")
void add(String username, String md5String);
@Update("update user set nickname=#{nickname},email=#{email},update_time=#{updateTime} where id=#{id}")
void update(User user);
}
六、测试更新功能
- 使用postman以put方式访问
- 在Body中使用raw编写访问json,实现更新测试
七、修改Controller实现参数校验
7.1、校验规则
请求参数说明:
参数名称 | 说明 | 类型 | 是否必须 | 备注 |
---|---|---|---|---|
id | 主键ID | number | 是 | |
username | 用户名 | string | 否 | 5~16位非空字符 |
nickname | 昵称 | string | 是 | 1~10位非空字符 |
邮箱 | string | 是 | 满足邮箱的格式 |
7.2、使用Spring Validation关键字实现校验
- 由于UserController中将接收的参数封装进了User类中,因此需要在User类中增加Spring Validation关键字实现校验功能
- 在UserController的update方法中使用Spring Validation进行参数校验
@Data
public class User {
@NotNull
private Integer id;//主键ID
private String username;//用户名
@JsonIgnore // 转换成jason时忽略此字段
private String password;//密码
@NotNull
@Pattern(regexp = "^\\S{1,10}$")
private String nickname;//昵称
@NotNull
@Email
private String email;//邮箱
private String userPic;//用户头像地址
private LocalDateTime createTime;//创建时间
private LocalDateTime updateTime;//更新时间
}
@PutMapping("/update")
public Result update(@RequestBody @Validated User user){
userService.update(user);
return Result.success();
}