복붙노트

[SPRING] Spring을 사용한 JSR-303 bean 검증은 시작되지 않습니다.

SPRING

Spring을 사용한 JSR-303 bean 검증은 시작되지 않습니다.

docs (http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/validation.html)에 제공된 내용에 따라 JSR-303 사용자 정의 유효성 검사기를 구성했습니다. classpath에 대한 LocalValidatorFactoryBean과 Hibernate validator. 그러나, 유효성 검사기는 그냥 걷어차기를 거부합니다. 여기에 간단한 단위 테스트 프로젝트 (https://github.com/abhijitsarkar/java/tree/master/spring-jsr-303)와 실패한 유닛 테스트. 당신이보기로 결정한다면, 그것을 복제하고 실행하십시오. 루트 디렉토리에서 테스트를 수행하십시오. Spring 프레임 워크 4.0.2.RELEASE와 Hibernate validator 5.0.3을 사용하고 있습니다. 최종.

유효성 검사중인 메서드 :

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> {

봄 설정 :

@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]
    )

해결법

  1. ==============================

    1....

    ...

    @Service
    @Validated
    public class SpringBarista extends Barista {
    

    JSR-303과의 통합에 관해 언급하고있는 레퍼런스 매뉴얼 부분은 BV가 끼어 들지 않는이 2 가지 핵심 포인트를 편리하게 생략했다. 이것은 내가 의사가 말한 모든 것을 해낸 6 시간의 디버깅과 헤어 찢기를 야기했다. 나는 스프링 소스 코드를 통해 디버깅을해야만했다. 더 쉬운 방법이 있어야하고 나는이 문제를 가진 유일한 사람이 될 수 없습니다. 문서를 업데이트 할 수있는 JIRA SPR-11473을 만들었습니다.

  2. ==============================

    2.블렌드 인수에서 봄부터 유효성 검사까지는 @Valid 주석이 필요합니다.

    블렌드 인수에서 봄부터 유효성 검사까지는 @Valid 주석이 필요합니다.

    JSR 303에서 매개 변수 제한 조건을 지원하지 않으므로 사용자의 접근 방식이 작동하지 않을 수 있습니다.

    http://beanvalidation.org/1.0/spec/#constraintsdefinitionimplementation

  3. from https://stackoverflow.com/questions/21963784/jsr-303-bean-validation-with-spring-does-not-kick-in by cc-by-sa and MIT license