我有这两种方法
public ResponseEntity<UserDto> editUser(@RequestBody UserPostDto userPostDto) {
return new ResponseEntity(userService.editUser(userPostDto), HttpStatus.OK);
}
和
userPostDto.setPassword(bCryptPasswordEncoder.encode(userPostDto.getPassword()));
var edited = userRepository.save(userMapper.dtoToModel(userPostDto));
return userMapper.modelToDto(edited);
}
我想编辑用户详细信息,但这些方法将用户保存为新用户,我无法使用生成的令牌再次登录。
答案 0 :(得分:1)
首先,您需要使用 findById 方法获取用户,然后更新该用户的内容,最后保存该用户。
Optional<Post> optional = postRepository.findById(user.getId());
User user= optional.get();
// update the contents
userRepository,save(user);
答案 1 :(得分:0)
userMapper 在做什么?如果你想更新用户,然后通过 findById() 从数据库中获取用户,然后进行更新并保存它不会再次重新创建。
答案 2 :(得分:0)
试试这个
user = userRepository.findById(userPostDto.getId());
如果您在 Dto 中没有 id 则考虑通过用户名/电子邮件查找(必须是唯一的)
//in userRepository
public User findByUserName(String userName);
// in service class
user = userRepository.getUserByUserEmail(userPostDto.getUserName());
如果您使用的是 Spring Security,则需要登录用户
// In controller
public ResponseEntity<UserDto> editUser(@RequestBody UserPostDto userPostDto, Principal principal) {
return new ResponseEntity(userService.editUser(userPostDto,principal), HttpStatus.OK);
}
// In-Service class
user = userRepository.getUserByUserEmail(principal.getName());
一旦你得到用户对象,修改你想要的任何属性,然后保存
userRepository.save(user)