2017-12-05 21 views
2

일부 유효성 검사 유형의 새 제약 조건 유효성 검사기를 Bean 유효성 검사 사양에 정의 된 주석에 등록 할 수 있는지 궁금합니다. 예를 들어 은하자 이미지 나는 내가이 유형에 대한 @Positive 주석을 지원하는 사용자 정의 제약 유효성 검사기를 등록하려고 여러 INT 값표준 빈 유효성 검사 주석에 대한 새로운 제약 조건 유효성 검사기 등록

public class IntContainer 
{ 
    private int value1; 
    private int value2; 


    public int getValue1() 
    { 
    return value1; 
    } 


    public void setValue1(final int value1) 
    { 
    this.value1 = value1; 
    } 


    public int getValue2() 
    { 
    return value2; 
    } 


    public void setValue2(final int value2) 
    { 
    this.value2 = value2; 
    } 
} 

을 축적 클래스 (대신 만든 사용자 지정 주석)가 있습니다.

public class PositiveIntContainerValidator implements ConstraintValidator<Positive, IntContainer> 
{ 
    @Override 
    public boolean isValid(final IntContainer value, final ConstraintValidatorContext context) 
    { 
    //TODO: do some validation here based on IntContainer state 
    return false; 
    } 
} 

그래서 그 후에 나는 이것을 사용할 수 있습니다 :

@Positive 
private IntContainer valueContainer; 

답변

1

귀하의 유효성 검사기의 완전한 이름을 추가 할 수있는 파일 META-INF/services/javax.validation.ConstraintValidator에 있습니다. 이것은 Hibernate Validator가 당신의 validator를 집어 올리는 것을 허용 할 것이고 그것은 당신의 커스텀 타입을 위해 사용될 것이다. 이 post에 필요한 경우

은 검사기가이 기능을 지원하지 않기 때문에, 당신의 IntContainer 클래스에 @Positive 주석을 사용할 수 없습니다

+1

좋아! 고마워요! –

0

을 (섹션 "비 표준 클래스에 대한 표준 제약을 사용") 자세한 내용을 참조하십시오 데이터 형식. @Positive 주석에 대한

지원되는 유형은 다음과 같습니다

  • BigDecimal를
  • BigInteger를
  • 바이트, 짧은, INT, 긴, 플로트, 더블, 각각의 래퍼

Annotation Type Positive을 참조하십시오 .

여기에 두 가지 옵션이 있습니다. IntContainer에 대한 사용자 정의 유효성 검사기를 작성할 수도 있고, 멤버 변수가있는 엔티티에서 IntContainer를 가져 와서 유효성을 검사 할 수도 있습니다. 예를 들면 :

콩 : 공용 클래스 IntContainer {

@Positive 
private int value1; 
@Positive 
private int value2; 

public IntContainer() { 

} 

public IntContainer(int value1, int value2) { 
    this.value1 = value1; 
    this.value2 = value2; 
} 

public int getValue1() { 
    return value1; 
} 

public void setValue1(final int value1) { 
    this.value1 = value1; 
} 


public int getValue2() { 
    return value2; 
} 


public void setValue2(final int value2) { 
    this.value2 = value2; 
} 

} 

나머지 :

@POST 
public Response postTest(TestRest testRest) { 
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    Validator validator = factory.getValidator(); 

    Set<ConstraintViolation<IntContainer>> constraintViolations = validator.validate(testRest.getIntContainer()); 
    System.out.println(constraintViolations.size()); 

    return Response.status(Response.Status.OK).entity(constraintViolations.size()).build(); 
} 
+1

그게 내 질문의 목표 였어 :) 대답은 에 의해 제공 된 다음 @mark_o 나는 그것을 할 수 있었다. –