I have a custom validator that validates data against DB using repository:
@Constraint(validatedBy = DataValidator.class)
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomValidator {
String message() default "some message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
@Component
public class DataValidator implements ConstraintValidator<CustomValidator, String> {
@Autowired
private DataRepository repository;
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
var data = repository.findDataByValue(value);
//validation logic with result in 'isValid' variable
return isValid;
}
}
I have entity with a field that is annotated with DataValidator:
@Entity
@Table(name = "custom_data")
public class Data {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@DataValidator
@NotBlank(message = "Value is mandatory")
@Column
private String value;
Spring Boot dependencies:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
When I call repository.save(data)
from the rest controller, my validator is called, but its repository
field is null
.
What configuration did I miss that DataRepository
bean was injected to RestController correctly, but wasn't injected into DataValidator
?