Java EE 6+에 수반되는 Bean Validation API에 대해 많이 읽었으며 유효성 검사 API의 작동 방식에 대한 기본 사항을 이해하고 있지만 지금까지 읽은 문서에서는 예제는 단위 테스트로, 유효성 검사 작업을 구현하는 데 도움이되지 않습니다.EJB를 사용한 Bean 유효성 확인
3 계층 아키텍처 시스템을 개발 중입니다. 유효성 검사 코드를 서비스 계층에 배치하고 싶습니다. 따라서 프레젠테이션 계층이 다른 경우 (예 : Jax-RS, JSF 등) 유효성 검사 코드를 다시 사용할 수 있습니다. 그러나 나는 그 작업을 구현하는 방법에 대해 혼란 스럽다. 여기에 내가 갇혀있다 :
나는 내 모델에서 다른 엔티티와 상호 작용하는 콩 있습니다. 나는 정말 그 방법에 액세스하기 위해 다시 빈을 인스턴스화 할 예정 건가요
Car object = new Car("Morris");
Method method = Car.class.getMethod("drive", int.class);
Object[] parameterValues = { 80 };
Set<ConstraintViolation<Car>> violations = executableValidator.validateParameters(
object,
method,
parameterValues
);
assertEquals(1, violations.size());
Class<? extends Annotation> constraintType = violations.iterator()
.next()
.getConstraintDescriptor()
.getAnnotation()
.annotationType();
assertEquals(Max.class, constraintType);
:>
여기public User getUser(
@Min(value = 0, message = "Must have a positive userId") int uid)
throws RetrievalNotFoundException {
try {
// I WANT TO VALIDATE UID HERE
// find User with provided uid
User foundUser = em.find(User.class, uid);
// IF the user is inactive
if (foundUser.getIsActive() == 0) {
// cannot find the content
throw new RetrievalNotFoundException();
}
// close the entity manager
em.close();
// return the user
return foundUser;
}
가 최대 절전 모드 문서의 예이다 - 예를 들어이 사용자 상호 작용에 대한 내 빈 내에서 방법은 getUser()? 나는 혼란 스럽다. 내가 가진 또 다른 질문은 누군가 int 컨테이너를 오버플로하는 uid를 int에 넣기로 결정하면 어떻게 될까요? 어떻게 그걸 확인하겠습니까?
도움을 주셔서 대단히 감사합니다. 정말 고맙습니다.
감사합니다. 유용한 정보가 많이 있습니다. 실제로 glassfish 4.0 런타임 환경에서 Java EE 7을 사용하고 있습니다. 당신이 말한 것처럼 메소드 레벨 검증은 기본적으로 이루어집니다. 필자는 더 긴 매개 변수 목록을 가진 메서드에 대해 내 자신의 유효성 검사기를 작성해야하며 매개 변수에 대한 모든 제약 조건을 인라인하지 말아야한다고 생각합니다. 도움 주셔서 감사합니다. –
수정, 글래스 피쉬 4를 사용하는 EE7은 내가 언급 한 스펙 섹션에 따라 메소드 유효성 검증이 가능합니다. 커스텀 제약 조건과 관련해서는 자신 만의 제약 조건을 만들 수는 있지만 주석이 어떻게 줄어들지는 알 수 없습니다. 물론 여러 구속 조건을 단일 구속 조건으로 결합하기를 원하지 않는 한. 물론 주석의 양을 매개 변수의 위치로 줄일 수 있습니다. – Hardy