Spring Boot MongoRepository 忽略验证

3

我有一个正常运行的Mongodb仓库:

@RepositoryRestResource(collectionResourceRel = "audits", path = "audits")
public interface AuditRepository extends MongoRepository<Audit, String> {
}

我有一个名为Audit的bean,它是:

@Data
@Document
@JsonIgnoreProperties(ignoreUnknown = true)
@Validated
public class Audit {
    @Id private String id;

    @NotNull
    private Date start;

    @NotNull
    private Date end;
}

我使用Lombok来获取/设置。

我期望Repository验证Audit bean,但它保存了一个开始和结束日期为空的audit bean。

我在build.gradle中添加了以下内容:

compile("org.springframework.boot:spring-boot-starter-validation")

如何告诉REST服务使用验证?我在RepositoryRestConfiguration中没有看到任何可以打开它的东西...

1个回答

6
您需要导入验证库:

maven

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

或者使用Gradle。
compile group: 'org.hibernate', name: 'hibernate-validator', version: '5.4.2.Final'

你需要配置两个bean:

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

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

所以我更新了Hibernate版本(Hibernate验证器6在这里不起作用),并修复了您的代码片段,并将其标记为正确。 - mikeb
1
在2021年,如果您添加了依赖项,则它可以与NotNull一起使用,但不能与NotBlank一起使用(在这种情况下,它总是失败)。不过,答案的其余部分看起来都正确,尽管我从https://dev59.com/ZVgQ5IYBdhLWcg3wvGcY复制了我的工作代码。 - Rob Pitt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接