玩! 1.2.5 与 mongodb |模型验证未发生

Posted

技术标签:

【中文标题】玩! 1.2.5 与 mongodb |模型验证未发生【英文标题】:Play! 1.2.5 with mongodb | Model Validation not happening 【发布时间】:2012-10-16 17:04:47 【问题描述】:

我有一个简单的 User 模型,其字段使用如下所示的播放验证注释和 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,用户文档也会保留在 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);
        

【问题讨论】:

【参考方案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

【讨论】:

根据您的回答修改。但似乎不起作用。已编辑原始帖子,包含所有详细信息

以上是关于玩! 1.2.5 与 mongodb |模型验证未发生的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB未授权访问漏洞复现及docker.mongodb下--auth授权验证

如何使用 Rails 在 MongoDB 中验证跨模型的唯一性?

CommandError:一个或多个模型未验证

玩! 1.2.5.:对象的枚举集合绑定到模板

MongoDB与python交互!这才是正确玩转数据库的正确方式!

MongoDB查询与游标,彻底玩转分布式文件存储