벨리데이션 프레임워크
hybernate validator
우리꺼 프레임 워크
POJO??
Front controller, command handler/back-end controller
finder가 front controller의 역할을 가져감
Front controller + command handler 살펴보기
검색어 : hibernate validator
3.3.0 방식에?? 가장 광범위하게 쓰인다
implementatin - 인터페이스의 구현체를 준다
벨리데이션이 어디서 이뤄지는지를 볼수 있다.
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface
각 layer별 다 검증을 수행하는데 이러면 중복이 발생하고 불편하다
따라서 검증이라는 코드를 모두가 쓰는 Domain layer 에서 처리하면 중복 제거가능
카피
pom.xml에 기술
검증메시지를 만들때 사용, 카피
마찬가지로 pom.xml에 기술
가급적이면 프레임워크도 맞춰야한다??
@Size
다 다르게 설정할수 있다?
@NotBlank
@Size(min=5, max=12)
// private transient String mem_pass;
@Pattern
패턴도 설정가능
@NotBlank
@Pattern(regexp="[0-9]{6}")
private transient String mem_regno1;
@NotBlank
@Pattern(regexp="[0-9]{7}")
private transient String mem_regno2;
검증룰을 적용할때는 쓸수 있는 녀석인지를 봐야한다.
@Size 사용불가
@Min 사용가능
@Min(0)
@Max(Integer.MAX_VALUE)
private Integer mem_mileage;
// @Min은 싱글 벨류 어노테이션으로 사용했다.
//@Min(value=)
각 어노테이션들이 공통적으로 가지고 있는 녀석들
Test 케이스??
각테스트 케이스 이전에 실행한다.
빌더와 팩토리 오브젝트 패턴 적용되어 있다.
private Validator validator;
@Before
public void setup() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
하나의 입력 데이터에 대하여 멀티 에러 메시지를 줄 수 있다.
어떤 비즈지스 로직을 쓰냐에 따라서 검증이 달라져야한다. groups? "class<?>... group"
인터페이스에 아무것도 없다?? 마커 어노테이션? 표현
package kr.or.ddit.validate.groups;
public interface DeleteGroup {
}
@NotBlank(groups=InsertGroup.class)
@Pattern(regexp="[0-9]{6}")
private transient String mem_regno1;
@NotBlank(groups=InsertGroup.class)
@Pattern(regexp="[0-9]{7}")
private transient String mem_regno2;
DefaultGroup?
interface에 extends Default를 상속한뒤 적용한 것임
// interface에 extends Default를 상속한뒤 적용한 것임
@NotBlank(groups= {Default.class, DeleteGroup.class})
private String mem_id;
// 그냥 Default만 있으면 생략이 가능하다
그룹에 해당하는 녀석만 체크하는 걸 확인 할 수 있다.
링크로 가서
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#_validating_constraints
좌측 사이드 메뉴 - 4. Interpolating constraint error messages
기본 메시지 변경가능, 비추, 사용X
이방식도 사용하지 않음
프로퍼티 형태로 꺼내 쓸수 있다는 것?
빌더 패턴
interpolator 간섭자 중간에 뺏어서 처리?
![](https://images.velog.io/images/hkjs96/post/cab403f8-acff-4e12-b4ae-
9ba3ac41a911/image.png)
다중 메시지 처리
memberVO에서 @NotBlank, @Size 등의 ctnl 클릭 후 QFN 카피
QFN 복사후 .message = 메시지 입력
테스트에 만들어보기
Locator에 message.properties QFN 카피후 정리, properties는 뒤에 베이스 네임 말구는 못찾는다.
이후 우리꺼 CommonValidator에 적용
@Constraint(validatedBy = CheckCaseValidator.class)
필수
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
CaseMode value();
value는 필수 위처럼 default{ } 붙은 애들은 옵션
커스텀 어노테이션 정의, 옵션정의, 한쌍으로가는 벨리데이터 존재
어노테이션의 QFN 카피
message
정리하기
컴파일하면 주석은 사라짐 -> 시스템에 정보를 제공할 수 없다.
주석은 class파일 (컴파일된 파일)에는 추가되지 않는다.
이를 보완
어노테이션의 영향을 받는 범위도 제한할 수 있다.
사전적의미 - 주석
annotation
marker annotation
single value annotation : value 속성으로 설정하는 경우, single value 속성명 생략 가능.
multi value annotation : 모든 속성명 기술.
custom annotation : @interface 키워드로 정의, annotatin도 class
필수 정책(@Target, @Retention)
어노테이션 트레이싱 + 리플렉션
어려운것.. ㅇㅅㅇ 복습해도 어려워요