以下のようなプレイ検証アノテーションとモルフィアアノテーションでフィールドにアノテーションが付けられた単純な User モデルがあります。
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 メソッドを持つサービスができました。dao サポートに Morphia プラグインを使用しました。しかし、問題は、userName または userEmail が NULL であっても、ユーザー ドキュメントが 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() チェックを追加しても機能しません。以下のコードは 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);
}
}