Playframework Подтвержденное "поле" JSR-303 не имеет соответствующего доступа для привязки данных
Когда я добавил этот код в свой проект
Form<User> filledForm2 = userSignupForm.bindFromRequest();
Он перестает работать, показывая сообщение об ошибке:
Execution exception
[IllegalStateException: JSR-303 validated property 'Password' does not have a corresponding accessor for data binding - check your DataBinder configuration (bean property versus direct field access)]
Мой класс User
был таким:
class User{
String username;
String Password;
}
Теперь, как проверить/изменить конфигурацию DataBinder в java play framework?
Ответы
Ответ 1
На самом деле это не должно происходить, поскольку Play автоматически генерирует геттеры и сеттеры, см. комментарий Guillaume.
Поэтому возможно, что ваша среда IDE вызывает проблемы, например. Комментарий Guillaume re Eclipse. Или что ваш sbt-кеш поврежден и нуждается в очистке, что вы можете сделать с помощью play clean-all
(читать об этом здесь)
Кстати, изменение вашего атрибута Password
на Password
может привести к повторному созданию кэша и, следовательно, устранению проблемы.
Ответ 2
Моя среда - Mac OS X 10.9.5 и запускает CentOS 7 с Vagrant. На CentOS возникла одна и та же проблема, но на Mac OS этого не произошло. Версия Play Framework - 2.3.8.
Комменад ниже не работал в моем случае:
activator clean
activator clean-files
Хотя это так странно, мне нужно было определить getter и setter для успешного использования Play Framework в CentOS7 следующим образом:
@Entity
public class Message extends Model{
@Id
public long id;
@Constraints.Required
public String name;
//Add getter and setter to work successfully...
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Ответ 3
Я получил ту же ошибку, пытающуюся проверить поле int
в POJO, используя
@Min(value = 0)
.
Решено, поставив аннотацию на геттер в сочетании с @Valid
в моей bean.
Ответ 4
Имел ту же проблему...
Чтобы удалить эту ошибку, вы должны определить свои переменные как общедоступные.
class User{
public String username;
public String password;
}