一尘不染

如何获取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);
    }

}

阅读 234

收藏
2020-05-30

共1个答案

一尘不染

首先,请确保您在类路径上具有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();
}

瞧!验证现已开始。

2020-05-30