Подтвердить что ты не робот

Java.lang.NoSuchMethodException: userAuth.User. <init>()

У меня есть класс с проверкой:

public class User {
    @Size(min=3, max=20, message="User name must be between 3 and 20 characters long")
    @Pattern(regexp="^[a-zA-Z0-9]+$", message="User name must be alphanumeric with no spaces")
    private String name;

    @Size(min=6, max=20, message="Password must be between 6 and 20 characters long")
    @Pattern(regexp="^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$", message="Password must contains at least one number")
    private String password;

    public User(String _name, String _password){
        super();
        name = _name;
        password = _password;
    }

    public String getName(){
        return name;
    }

    public String getPassword(){
        return password;
    }

    public void setPassword(String newPassword){
        password = newPassword;
    }

}

когда я проверяю значения, я получил сообщение:

SEVERE: Servlet.service() for servlet osAppServlet threw exception
java.lang.NoSuchMethodException: userAuth.User.<init>()

где проблема?

4b9b3361

Ответ 1

Сообщение java.lang.NoSuchMethodException: userAuth.User.<init>() означает, что кто-то пытался вызвать конструктор без каких-либо параметров. Добавление конструктора по умолчанию должно решить эту проблему:

public class User {

    public User() {

    }

    ..
}

Ответ 2

Добавить конструктор без параметров:

public class User {
  ...
  public User() {}
  ...
}

Ответ 3

Я думаю, что ответ добавления конструктора no-args по умолчанию ясен. Однако нужно также подумать о видимости последнего конструктора. В предыдущих ответах показано использование конструктора public no-args default. Является ли видимая общедоступная видимость относительно логики класса?

На самом деле, Hibernate не требует конструктора public no-args. Можно все же выбирать видимость.

Поэтому я рекомендую внимательно следить за видимостью конструктора (private/public/protected/default). Выберите подходящий. Например, если никто не может назвать этот конструктор без аргументов, выберите видимость private, например:

public class User {
  ...
  private User() {}
  ...
}

Ответ 4

Если класс User является нестационарным внутренним классом другого класса (например, UserAuth), тогда сообщение может возникнуть, если пользовательский класс пытается создать экземпляр перед созданием внешнего класса. В этом случае конструктор null-arg может быть там в коде, но не будет найден, так как внешний класс еще не существует. Решением может быть извлечение внутреннего класса в независимый класс, чтобы сделать его статичным или обеспечить инициализацию внешнего класса до того, как будет выполняться внутренний класс.