Ich habe einen benutzerdefinierten JSR-303-Validator nach den Angaben in der Dokumentation (http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/validation.html) konfiguriert, einschließlich LocalValidatorFactoryBean und Hibernate-Validator für den Klassenpfad. Mein Validator weigert sich jedoch einfach einzusteigen. Ich habe hier ein einfaches Test-Test-Projekt erstellt (https://github.com/abhijitsarkar/java/tree/master/spring-jsr-303), zusammen mit einem fehlgeschlagenen Komponententest. Sollten Sie sich entscheiden, einen Blick darauf zu werfen, klonen Sie einfach und führen Sie gradlew clean test
aus dem Stammverzeichnis. Ich benutze Spring Framework 4.0.2.RELEASE und Hibernate Validator 5.0.3.Final.JSR-303-Bean-Validierung mit Spring tritt nicht ein
Methode unter Validierung:
public Coffee serve(@ValidOrder(Coffee.Blend.class) final String blend) {
ValidOrder Anmerkung:
@Documented
@Constraint(validatedBy = {OrderValidator.class})
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,
ElementType.FIELD,
ElementType.ANNOTATION_TYPE,
ElementType.CONSTRUCTOR,
ElementType.PARAMETER})
@NotNull
public @interface ValidOrder {
OrderValidator validator:
public class OrderValidator implements ConstraintValidator<ValidOrder, String> {
Feder config:
@Configuration
@ComponentScan(basePackages = "name.abhijitsarkar.coffeehouse")
@EnableAspectJAutoProxy
public abstract class AppConfig {
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
}
Abhängigkeiten:
dependencies {
compile(
[group: 'javax.inject', name: 'javax.inject', version: injectApiVersion],
[group: 'javax.validation', name: 'validation-api', version: beanValidationApiVersion],
[group: 'javax.annotation', name: 'javax.annotation-api', version: annotationApiVersion],
[group: 'org.springframework', name: 'spring-beans', version: springVersion],
[group: 'org.springframework', name: 'spring-context', version: springVersion],
[group: 'org.springframework', name: 'spring-aop', version: springVersion],
[group: 'org.aspectj', name: 'aspectjrt', version: aspectjVersion]
)
runtime(
[group: 'org.hibernate', name: 'hibernate-validator', version: hibernateValidatorVersion],
[group: 'javax.el', name: 'javax.el-api', version: elVersion],
[group: 'org.glassfish.web', name: 'javax.el', version: glassfishElVersion],
[group: 'org.aspectj', name: 'aspectjweaver', version: aspectjVersion]
)
'@ Valid' wird verwendet, um eine Bean rekursiv zu validieren, ich bin mir nicht sicher, ob es überhaupt auf String-Typ funktioniert; es kann erwarten, dass Mitglieder der Klasse ihre eigenen Validierungsbeschränkungen haben. Das war sowieso nicht mein Problem. Bitte sehen Sie meine Antwort oben. –
Auch Parameter-Constraints werden von BV 1.1 http://beanvalidation.org/1.1/spec/#constraintsdefinitionimplementation –
unterstützt. Danke, dass Sie das geklärt haben. – Bart