2020-12-23
벨리데이션 프레임워크
hybernate validator
우리꺼 프레임 워크
POJO??
Front controller, command handler/back-end controller
finder가 front controller의 역할을 가져감
Front controller + command handler 살펴보기
Hibernate validator
검색어 : 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에 적용
프로퍼티 메시지 고쳐야함.. 에러남(오타)
커스텀
- Creating custom constraints
@Constraint(validatedBy = CheckCaseValidator.class)
필수
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
CaseMode value();
value는 필수 위처럼 default{ } 붙은 애들은 옵션
커스텀 어노테이션 정의, 옵션정의, 한쌍으로가는 벨리데이터 존재
어노테이션의 QFN 카피
message
Annotation
정리하기
컴파일하면 주석은 사라짐 -> 시스템에 정보를 제공할 수 없다.
주석은 class파일 (컴파일된 파일)에는 추가되지 않는다.
이를 보완
어노테이션의 영향을 받는 범위도 제한할 수 있다.
사전적의미 - 주석
-
annotation
- 시스템과 사람에게 일정 정보를 제공하기 위한 메타 데이터 표현 방식
-
marker annotation
- 표현의 역할 (~하는 것인지, 아무것도 기술하지 않는다.)
-
single value annotation : value 속성으로 설정하는 경우, single value 속성명 생략 가능.
-
multi value annotation : 모든 속성명 기술.
-
custom annotation : @interface 키워드로 정의, annotatin도 class
-
필수 정책(@Target, @Retention)
어노테이션 트레이싱 + 리플렉션
어려운것.. ㅇㅅㅇ 복습해도 어려워요
Author And Source
이 문제에 관하여(2020-12-23), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hkjs96/2020-12-23저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)