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

2022-09-01 20:25:59

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

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's configuration (bean property versus direct field access)]

我的班级是这样的:User

class User{
String username;
String Password;
}

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


答案 1

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

因此,您的IDE可能会导致问题,例如Guillaume的评论re Eclipse。或者您的sbt缓存已损坏,需要清理,您可以使用它(在此处阅读有关它的信息)play clean-all)

顺便说一句,将属性更改为 可能导致重新生成缓存,因此修复了问题。Passwordpassword

更新:

对于使用 的较新版本的 Play,似乎以下是最新的等效项:activator

activator cleanactivator clean-files


答案 2

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

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

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

推荐