我有一个简单的用户模型,其字段用播放验证注释和morphia注释注释,如下所示。
import play.data.validation.*;
import play.modules.morphia.Model;
import com.google.code.morphia.annotations.*;
@Entity
public class User extends Model{
@Id
@Indexed(name="USERID", unique=true)
public ObjectId userId;
@Required public String userName;
@Email
@Indexed(name="USEREMAIL", unique=true)
@Required public String userEmail;
}
现在我有一个服务,它有一个CreateNewUser方法负责持久化数据。我使用了Morphia插件来支持dao。 但问题是即使userName或userEmail为NULL,User Document也会在mongo-db中保留。此外,@ Email验证不会发生
// Below code is in app/controllers/Application.java
User a = new User();
a.userName = "user1";
// calling bean to create user, userService is in app/service/UserService
userService.createNewUser(a);
即使在添加了@valid和validation.hasErrors()之后它也不起作用.Below代码在app / service / UserService中
public void createNewUser(@Valid User user) {
if (Validation.hasErrors()) {
System.out.println("has errors");
} else {
// TODO Auto-generated method stub
userDao.save(user);
}
}
答案 0 :(得分:1)
现在我明白了,createNewUser不是一个动作。 因此,您可以强制执行对象验证:
public void createNewUser(User user) {
final Validation.ValidationResult validationResult = validation.valid(user);
if (validationResult.ok) {
userDao.save(user);
} else {
System.out.println("has errors");
}
}
api:http://www.playframework.org/documentation/api/1.2.5/play/data/validation/Validation.html
旧答案
您忘记了注释以验证对象,您必须检查表单是否有错误。
public void createNewUser(@Valid User user) {
if(validation.hasErrors()) ...
来源:http://www.playframework.org/documentation/1.2.5/validation#objects