Spring Boot 中的用户详细信息更新

时间:2021-07-15 12:28:15

标签: java spring spring-boot spring-mvc jwt

我有这两种方法

    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);
    }

我想编辑用户详细信息,但这些方法将用户保存为新用户,我无法使用生成的令牌再次登录。

3 个答案:

答案 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)

试试这个

方法 1-
user = userRepository.findById(userPostDto.getId());

方法2-

如果您在 Dto 中没有 id 则考虑通过用户名/电子邮件查找(必须是唯一的)

//in userRepository
public User findByUserName(String userName);

// in service class
user = userRepository.getUserByUserEmail(userPostDto.getUserName());

方法 3

如果您使用的是 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)