@Amir1807

Как сделать валидацию пользователя?

У меня есть метод validateUser и он должен выбрасывать исключение AccessDeniedException ну который сам создал. И я написал таким образом:
public static void validateUser(User user) throws AccessDeniedException{
        if(user.getAge()<18){
            throw new AccessDeniedException("Access Denied");
        }else{
            System.out.println("Age access granted");
        }
    }


И вопрос в том что как его вывести в методе main, ну допустим вводим логин и пароль юзера и если он меньше 18ти то должен вывести исключение. Ну я создал класс юзер с конструктором и геттерами. Весь код внизу(Не обращайте внимание на другие методы)

public static void main(String[] args) throws UserNotFoundException, AccessDeniedException{
        Scanner scanner = new Scanner(System.in);

        System.out.println("Введите логин: ");
        String login = scanner.nextLine();
        System.out.println("Введите пароль: ");
        String password = scanner.nextLine();

        //TODO Проверить логин и пароль
//        User user = getUserByLoginAndPassword(login, password);
//        System.out.println("User: " + user.getLogin() + " - " + user.getEmail());
//        System.out.println("Access granted");
        //TODO Вызвать методы валидации пользователя

    }
    
    public static User[] getUsers(){
        User user1 = new User("john", "john@gmail.com", "pass", 24);
        User user2 = new User("mike", "mike@gmail.com", "qwerty", 22);
        User user3 = new User("steve", "steve@gmail.com", "asdfg", 23);
        return new User[]{user1, user2, user3};
    }

    public static User getUserByLoginAndPassword(String login, String password) throws UserNotFoundException{
        User[] users = getUsersList();
        for (User user : users) {
            if(login.equals(user.getLogin()) && password.equals(user.getPassword())){
                return user;
            }
        }
        throw new UserNotFoundException("User not found: " + login);
    }

    private static User[] getUsersList() {
        return getUsers();
    }


    public static void validateUser(User user) throws AccessDeniedException{
        if(user.getAge()<18){
            throw new AccessDeniedException("Access Denied");
        }else{
            System.out.println("Age access granted");
        }
    }
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 2
@gsaw
Непонятный вопрос конечно, но наверное так

try {
    validateUser()
    System.out.println("Проходите")
} catch( AccessDeniedException e) {
    System.out.println("Не положено!")
}
Ответ написан
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Не надо так вообще делать. Нельзя строить бизнес-логику на исключениях. Выбрасывание исключения - это очень дорогая операция. И поэтому она должна быть исключительной, то есть не нормальной для работы программы.

Метод валидации должен возвращать код ошибки валидации (в простейшем случае - true/false, в более сложном - enum { OK, AGE_DENIED, PERMISSION_DENIED, ....}, в сложном - объект с дополнительными полями(в джаву как раз sealed class'ы завезли).
Выше по стеку(в твоём случае - в main) должна быть проверка и уже реакция, принты и тд. Сам метод валидации не должен ничего печатать.

Не надо хранить ничего вот в статике. Это дурной тон, и неудобно. Максимально быстро уходи от статики как-то так:
class App {
    public static void main (args){
         new App(args).run();
    }

    private  void run(args) { 
          //.... твой код
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы