Как установить значение для метода получения и установки, которое не является обязательным при весенней загрузке - PullRequest
2 голосов
/ 10 апреля 2020

Я пытаюсь установить значение setIs_active на true, когда регистрация пользователя завершена, но я выбрал метод findByEmail как необязательный, не могу установить значение true. Может кто-нибудь сказать мне, что является причиной этого?

 public String confirmAccount(String confirmationToken)
        {
            ConfirmationToken token = confirmationTokenRepository.findByConfirmationToken(confirmationToken);
            if(token != null)
            {
                Optional<User> user = userRepository.findByEmail(token.getUser().getEmail());
                user.setIs_active(true);//here I am getting error
                userRepository.save(user);//here I am getting error
                return "Your account is activated" ;
            }
            else
                return "Error ! Please try again";

        }

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Вы получаете Необязательный пользовательский объект, а не пользовательский объект.

Путь 1:

User user = userRepository.findByEmail(token.getUser().getEmail()).orElse(null);

Путь 2: проверка присутствует, затем установите:

Optional<User> user = userRepository.findByEmail(token.getUser().getEmail());

    if (user.isPresent()) {
    User user1 = user.get();
    //set && save
    }
0 голосов
/ 10 апреля 2020

Вы пытаетесь вызвать .setIs_active() метод для Optional<User>, это неправильно.

Сначала получите пользователя от Optional<User>, затем вызовите .setIs_active()

Итак, User может быть нулевым, поэтому сначала проверьте его с помощью .isPresent() и получите User

if (user.isPresent()) {
    User userObj = user.get();
}

Затем вызовите .setIs_active() для установки и сохранения в базе данных.

userObj.setIs_active(true);
userRepository.save(userObj);

Полный код:

Optional<User> user = userRepository.findByEmail(token.getUser().getEmail());
if (user.isPresent()) {
    User userObj = user.get();
    userObj.setIs_active(true);
    userRepository.save(userObj);
    return "Your account is activated" ;
}
0 голосов
/ 10 апреля 2020

Пользователь является необязательным, поэтому вы не можете использовать на нем сеттер.

Optional<User> user = userRepository.findByEmail(token.getUser().getEmail());

if(user.isPresent()) 
{
    User myUser = user.get();
    myUser.setIs_active(true);
    userRepository.save(user);
    return "Your account is activated" ;
}
...