У меня есть простой @Document
, который при сохранении в MongoDB с использованием spring-data-mongodb не применяет никаких проверочных аннотаций.
Документ:
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.NotBlank;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
import java.time.Instant;
@Accessors(chain = true)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "calls")
public class Call {
@Id
private UUID id;
@NotBlank("Owner ID is required")
@Indexed
private String ownerId;
@NotNull
private Instant createdAt;
}
Конфигурация валидатора:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.mapping.event.ValidatingMongoEventListener;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
@Configuration
public class MongoValidator {
@Bean
public ValidatingMongoEventListener validatingMongoEventListener() {
return new ValidatingMongoEventListener(validator());
}
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
}
Когда я пытаюсь сохранить в MongoRepository<Call, UUID>
, я получаю ожидаемое исключение:
javax.validation.ConstraintViolationException: null
at org.springframework.data.mongodb.core.mapping.event.ValidatingMongoEventListener.onBeforeSave(ValidatingMongoEventListener.java:67)
at org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener.onApplicationEvent(AbstractMongoEventListener.java:88)
at org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener.onApplicationEvent(AbstractMongoEventListener.java:31)
Но только после документ сохраняется в хранилище, а не до.
Есть идеи, как выполнить валидатор перед сохранением?