开始
做更新操作,业务逻辑介绍
昵称如果不填写,直接保存会有提示
前端事件
前端保存事件
手机号
写后端代码
创建新的controller
@RestController
@Api(value = "用户信息接口",tags = "用户信息相关接口")
@RequestMapping("userInfo")
public class CenterUserController {
}
userId不动,还需要一个user的BO对象
@RestController
@Api(value = "用户信息接口",tags = "用户信息相关接口")
@RequestMapping("userInfo")
public class CenterUserController {
@Autowired
private CenterUserService centerUserService;
@ApiOperation(value = "修改用户信息",notes = "修改用户信息",httpMethod = "POST")
@PostMapping("update")
public IMOOCJSONResult update(
@ApiParam(name = "userId",value = "用户id",required = true)
@RequestParam(name = "userId") String userId,
@RequestBody UserBO userBO
) {
Users user = centerUserService.queryUserInfo(userId);
return IMOOCJSONResult.ok(user);
}
}
定义好的BO对象
改个名字CenterUserBO
确定
package com.imooc.pojo.bo.center;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
import java.util.Date;
@ApiModel(value="用户对象", description="从客户端,由用户传入的数据封装在此entity中")
public class CenterUserBO {
@ApiModelProperty(value="用户名", name="username", example="json", required = false)
private String username;
@ApiModelProperty(value="密码", name="password", example="123456", required = false)
private String password;
@ApiModelProperty(value="确认密码", name="confirmPassword", example="123456", required = false)
private String confirmPassword;
@NotBlank(message = "用户昵称不能为空")
@Length(max = 12, message = "用户昵称不能超过12位")
@ApiModelProperty(value="用户昵称", name="nickname", example="杰森", required = false)
private String nickname;
@Length(max = 12, message = "用户真实姓名不能超过12位")
@ApiModelProperty(value="真实姓名", name="realname", example="杰森", required = false)
private String realname;
@Pattern(regexp = "^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\\d{8})$", message = "手机号格式不正确")
@ApiModelProperty(value="手机号", name="mobile", example="13999999999", required = false)
private String mobile;
@Email
@ApiModelProperty(value="邮箱地址", name="email", example="imooc@imooc.com", required = false)
private String email;
@Min(value = 0, message = "性别选择不正确")
@Max(value = 2, message = "性别选择不正确")
@ApiModelProperty(value="性别", name="sex", example="0:女 1:男 2:保密", required = false)
private Integer sex;
@ApiModelProperty(value="生日", name="birthday", example="1900-01-01", required = false)
private Date birthday;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConfirmPassword() {
return confirmPassword;
}
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "CenterUserBO{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", confirmPassword='" + confirmPassword + '\'' +
", nickname='" + nickname + '\'' +
", realname='" + realname + '\'' +
", mobile='" + mobile + '\'' +
", email='" + email + '\'' +
", sex=" + sex +
", birthday=" + birthday +
'}';
}
}
引入这个BO对象
@RestController
@Api(value = "用户信息接口",tags = "用户信息相关接口")
@RequestMapping("userInfo")
public class CenterUserController {
@Autowired
private CenterUserService centerUserService;
@ApiOperation(value = "修改用户信息",notes = "修改用户信息",httpMethod = "POST")
@PostMapping("update")
public IMOOCJSONResult update(
@ApiParam(name = "userId",value = "用户id",required = true)
@RequestParam(name = "userId") String userId,
@RequestBody CenterUserBO userBO
) {
Users user = centerUserService.queryUserInfo(userId);
return IMOOCJSONResult.ok(user);
}
}
service层
CenterUserService
/**
* 修改用户信息
* @param userId
* @param centerUserBO
*/
public void updateUserInfo(String userId, CenterUserBO centerUserBO);
ctrl+F12。BO对象和这里的users大部分属性是一致的
把centerUserBO里面的对象拷贝到updateUser对象里面
@Transactional(propagation = Propagation.REQUIRED)
@Override
public void updateUserInfo(String userId, CenterUserBO centerUserBO) {
Users updateUser=new Users();
BeanUtils.copyProperties(centerUserBO,updateUser);
}
修改后,重新根据这个userId,再查询出来这个对象
@Transactional(propagation = Propagation.REQUIRED)
@Override
public Users updateUserInfo(String userId, CenterUserBO centerUserBO) {
Users updateUser=new Users();
BeanUtils.copyProperties(centerUserBO,updateUser);
updateUser.setId(userId);
updateUser.setUpdatedTime(new Date());
usersMapper.updateByPrimaryKeySelective(updateUser);
return queryUserInfo(userId);
}
接口的返回类型也改成Users
/**
* 修改用户信息
* @param userId
* @param centerUserBO
*/
public Users updateUserInfo(String userId, CenterUserBO centerUserBO);
controller代码完善
获取到新的对象后,要把数据覆盖本地的cookie里面。
之前我们在用户注册完毕也会有一个对象。放到cookie之前把一些没有必要显示的数据 set设置为null
这些代码都复制过来,借鉴一下
这里setNullProperty属性虽然和passportController代码有重复。
后续在整合完redis后,会做修改。会把这些重复的代码去掉。也会返回新的VO对象,。会有token这么个概念。
@ApiOperation(value = "修改用户信息",notes = "修改用户信息",httpMethod = "POST")
@PostMapping("update")
public IMOOCJSONResult update(
@ApiParam(name = "userId",value = "用户id",required = true)
@RequestParam(name = "userId") String userId,
@RequestBody CenterUserBO userBO
, HttpServletRequest request, HttpServletResponse response
) {
Users userResult = centerUserService.updateUserInfo(userId,userBO);
userResult=setNullProperty(userResult);
CookieUtils.setCookie(request,response,"user", JsonUtils.objectToJson(userResult),true);
// TODO 后续要改,增加令牌token,会整合进redis,分布式会话
return IMOOCJSONResult.ok();
}
private Users setNullProperty(Users userResult) {
userResult.setPassword(null);
userResult.setMobile(null);
userResult.setEmail(null);
userResult.setMobile(null);
userResult.setCreatedTime(null);
userResult.setUpdatedTime(null);
userResult.setBirthday(null);
return userResult;
}
测试
maven install
重启服务
刷新当前页面,页面上 依然是最新的修改后的数据
数据库内修改后的数据