mongodb - 如何让 Spring-Data-MongoDB 验证我的对象?

标签 mongodb bean-validation spring-data-mongodb spring-boot

我有一个使用 Spring-Data-Mongodb 的非常简单的 Spring Boot 应用程序

我要做的就是设置一个 JSR-303 验证规则,说明我要保存的对象必须有一个用户名。我读到 JSR-303 在 1.1 版中被添加到 spring-data-mongodb 中,所以我假设当我保存一个对象时它已经过验证,但事实并非如此。

有没有人有一个简单的示例设置来说明它是如何工作的?

我的用户 pojo 看起来像

public class User {

    @Id
    private String id;

    @NotNull(message = "User Name is compulsory")
    private String userName;
    private String password;

    public User() {}

    public String getId() {
      return id;
    }
    public void setId(String id) {
      this.id = id;
    }

    public String getUserName() {
      return userName;
    }
    public void setUserName(String userName) {
      this.userName = userName;
    }


    public String getPassword() {
      return password;
    }
    public void setPassword(String password) {
      this.password = PasswordAuthService.hash(password);
    }
}

我在某处看到只有在上下文中创建了验证器时才会启动验证,所以我尝试更新我的 Application 类(它包含所有配置,看起来像

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {

    @Bean
    public Validator getValidator() {
      LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
      return validator;
    }

    public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
    }

}

最佳答案

首先确保类路径上有 JSR-303 验证器,例如:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.2.0.Final</version>
</dependency>

如果你使用 Java 配置,方法是创建 2 个 bean:

@Bean
public ValidatingMongoEventListener validatingMongoEventListener() {
    return new ValidatingMongoEventListener(validator());
}

@Bean
public LocalValidatorFactoryBean validator() {
    return new LocalValidatorFactoryBean();
}

瞧!验证正在进行中。

关于mongodb - 如何让 Spring-Data-MongoDB 验证我的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22568962/

相关文章:

java - Mongo 模板的 findAndModify 返回空值以添加或更新嵌套元素

java - 在部署时从 javax.validation 库获取 NoSuchMethodError

spring - Spring-MongoDb聚合框架中如何使用$cond操作

java - spring-data-mongo - 可选查询参数?

node.js - Mongoose - (MongoDB) 中不同集合的相同模式

javascript - Mongoose:如何通过对象的键进行查询

java - @Pattern , JSR303 bean 验证 : regex check max 5 words and not blank

jpa - 为什么 Bean 验证器在不可为空但自动生成的 id 字段上抛出 ConstraintViolationException?

spring - 缺少类 org.springframework.objenesis.ObjenesisStd

mongodb - 如何使用 C# 驱动程序中的 BsonSerializer 为 MongoDB 克隆/复制 POCO 实体