Playframework JSR-303validation的“字段”没有相应的数据绑定访问器

当我将以下代码添加到我的项目中时

Form filledForm2 = userSignupForm.bindFromRequest(); 

它已停止工作,显示一条错误消息,指出:

 Execution exception [IllegalStateException: JSR-303 validated property 'Password' does not have a corresponding accessor for data binding - check your DataBinder's configuration (bean property versus direct field access)] 

我的User类是这样的:

 class User{ String username; String Password; } 

现在如何在java play框架中检查/修改DataBinder的配置?

实际上这不应该发生,因为Play会自动生成getter和setter, 请参阅Guillaume的评论 。

因此,您的IDE可能会导致问题,例如Guillaume对Eclipse的评论。 或者您的sbt缓存已损坏且需要清理,您可以通过play clean-all ( 在此处阅读 )

顺便说一下 ,将Password属性更改为password可能会导致重新生成缓存,从而解决了问题。

更新:

对于使用activator更新版本的Play,似乎以下是最新的等价物:

activator cleanactivator clean-files

我的环境是Mac OS X 10.9.5并使用Vagrant运行CentOS 7。 在CentOS上遇到了同样的问题,但在Mac OS上却没有。 Play Framework版本是2.3.8。

下面的commnad在我的情况下不起作用:

  activator clean activator clean-files 

虽然它很奇怪,但我必须定义getter和setter才能成功地在CentOS7上运行Play Framework,如下所示:

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

我在使用activator dist之前使用activator clean && activator clean-files修复了这个问题

我尝试使用@Min(value = 0)validationPOJO中的int字段时遇到了同样的错误。

解决方法是将getter中的注释与我的bean中的@Valid结合使用。

有同样的问题……

要删除此错误,您应将变量定义为public。

 class User{ public String username; public String password; }