2

JSR303 메서드 유효성 검사 도구를 사용하여 약간의 도움말을 통해 자동으로 서비스 계층의 입력을 검사합니다. 확실하게 누락 된 한 가지는 교차 매개 변수 유효성 검사를 수행하는 것입니다. 즉, 예를 들어 두 개의 날짜 매개 변수를 비교합니다. 최대 절전 모드 방법 유효성 검사를 통해이를 어떻게 달성 할 수 있습니까? 가능한가? 이 문제를 해결하는 다른 권장 방법은 무엇입니까?Hibernate (JSR 303) 메서드 유효성 검사를 사용하여 매개 변수 비교

이 내 측면

public abstract aspect ValidationAspect { 
@Inject 
private Validator validator; 

protected ParameterValidationError[] validateParameters(
     JoinPoint jp) {   
    MethodSignature methodSignature = (MethodSignature)jp.getSignature(); 
    Method targetMethod = methodSignature.getMethod(); 
    Object targetObj = jp.getThis(); 
    Object[] args = jp.getArgs(); 
    String[] names = ((CodeSignature)jp.getSignature()).getParameterNames();   

    MethodValidator methodValidador = validator.unwrap(MethodValidator.class); 
    Set<? extends MethodConstraintViolation<?>> validationErrors = methodValidador.validateAllParameters(      
      targetObj, 
      targetMethod, 
      args); 

    ParameterValidationError[] output = new ParameterValidationError[validationErrors.size()]; 
    int idx = 0; 
    for (MethodConstraintViolation<?> mcv : validationErrors) { 
     output[idx++] = new ParameterValidationError(
       mcv.getParameterIndex(), 
       names[mcv.getParameterIndex()], 
       mcv.getInvalidValue(), 
       mcv.getMessage());   
    } 

    return output; 
} 

}

답변

2

최대 절전 모드 검사기의 메소드 레벨 검증 크로스 매개 변수 유효성 검사를 허용하지 않는 현재의 코드입니다. 이것은 Bean Validation 1.0의 부록 C에 명시된대로 메소드 유효성 검증을 구현합니다.

Bean Validation 1.1에 대한 진행중인 토론의 일부는이 기능을 지원하는지 여부와 지원 방법입니다. 또한

를 참조하십시오