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

Zac*_*ley 17 mongodb bean-validation spring-data-mongodb spring-boot

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

我想要做的就是设置一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到某个地方,如果你在上下文中创建了一个验证器,验证只会启动,所以我尝试更新我的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);
    }

}
Run Code Online (Sandbox Code Playgroud)

Mac*_*iak 33

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

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.2.0.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果您使用Java配置,那么要创建2个bean:

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

@Bean
public LocalValidatorFactoryBean validator() {
    return new LocalValidatorFactoryBean();
}
Run Code Online (Sandbox Code Playgroud)

瞧!验证现在正在运行.


Joc*_*tel 5

从 Spring Boot 2.3 开始,必须添加 spring-boot-starter-validation 依赖项pom.xml(对于 Maven):

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-validation</artifactId> 
</dependency>
Run Code Online (Sandbox Code Playgroud)

不需要声明验证器 bean。

  • 我有这种依赖性,但 Mongo 验证不起作用 (6认同)