I have a very simple Spring Boot application that uses Spring-Data-Mongodb
All I want to do is set a JSR-303 validation rule that says the object I'm saving must have a username. I read that JSR-303 was added to spring-data-mongodb in version 1.1 so I assumed that when I save an object it's validated but this isn't the case.
Does anyone have a simple example setup that shows how this works?
My User pojo looks like
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); } }
I saw somewhere that validation only kicks in if you have a validator created in the context so I tried updating my Application class (which contains all the configuration, to look like
@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); } }
Yes, DataNucleus JPA allows it, as well as to many other databases. You make compromises by using the JPA API for other types of datastores, but it makes it easy to investigate them.
Spring features a Validator interface that you can use to validate objects. The Validator interface works using an Errors object so that while validating, validators can report validation failures to the Errors object.
First make sure that you have JSR-303 validator on classpath, for example:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.2.0.Final</version> </dependency>
If you use Java config, the way to go is to create 2 beans:
@Bean public ValidatingMongoEventListener validatingMongoEventListener() { return new ValidatingMongoEventListener(validator()); } @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); }
Voilà! Validation is working now.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With