我已經按照文檔(http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/validation.html)中給出的內容配置了一個JSR-303自定義驗證程序,並在類路徑中添加了LocalValidatorFactoryBean和Hibernate驗證程序。然而,我的驗證者拒絕參與。我在這裏(https://github.com/abhijitsarkar/java/tree/master/spring-jsr-303)提出了一個簡單的測試項目,還有一個失敗的單元測試。如果您決定查看,只需克隆它並從根目錄運行 gradlew clean test
。 我正在使用Spring框架4.0.2.RELEASE和Hibernate驗證器5.0.3.Final。Spring的JSR-303 bean驗證沒有啓動
下驗證方法:
public Coffee serve(@ValidOrder(Coffee.Blend.class) final String blend) {
ValidOrder註釋:
@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驗證:
public class OrderValidator implements ConstraintValidator<ValidOrder, String> {
Spring配置:
@Configuration
@ComponentScan(basePackages = "name.abhijitsarkar.coffeehouse")
@EnableAspectJAutoProxy
public abstract class AppConfig {
@Bean
public LocalValidatorFactoryBean validator() {
return new LocalValidatorFactoryBean();
}
}
個
依賴關係:
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'用於遞歸驗證一個bean,我不確定它是否對String類型有效;它可能期望類的成員有自己的驗證約束。無論如何,這不是我的問題。請看我上面的答案。 –
此外,BV 1.1支持參數約束http://beanvalidation.org/1.1/spec/#constraintsdefinitionimplementation –
感謝您清除該問題。 – Bart