Validation (입력유효성 검증)
- 스프링 MVC는 Bean Validation 기능을 이용해 요청 파라미터 값이 바인딩된 도메인 클래스의 입력값 검증을 한다.
의존성 추가
<!--validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
입력값 검증 규칙 지정
- 입력값을 검증할 도메인 클래스 필드에 검증 규칙 애너테이션을 지정한다.
- @NotNull -빈값이 아닌지를 검사한다.
- @NotBlank-문자열이 null이 아니고, trim한 길이가 0보다 크다는 것을 검사한다.
- @Size-글자수(컬렉션 요수 개수)를 검사한다.
- @Email-이메일 주소형식인지를 검사한다.
- @Past-과거 날짜인지를 검사한다.
- @Future-미래 날짜 인지를 검사한다.
입력 값 검증 활성화
- 입력값 검증을 원하는 클래스에 @Validated 애너테이션을 붙혀 검증을 활성화 시킨다.
입력값 검증 에러 표시
BndingResult:스프링에서는 입력값 검증을 한후에 에러정보를 확인하기 위한 클래스이다.
메서드
- hasErrors() : 에러가 발생할 경우 true 반환
- hasGlobalErrors(): 객체 레벨의 에러가 발생한 경우 true를 반환
- hasFieldErros():필드 레벨의 에러가 발생한 경우 true반화
- hasFieldErros(String):인수에 지정한 필드에서 에러가 발생한 경우 true 반환
인터페이스
1)패턴
pattern = Pattern.compile("^[_A-Za-z0-9-\\\\+]+(\\\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\\\.[A-Za-z0-9]+)*(\\\\.[A-Za-z]{2,})$");
-
^ : 문자열의 시작을 나타낸다.
-
[_A-Za-z0-9-\+]+: 이 부분은 유저네임에 해당하는 문자열을나타낸다.
- [] 안에 있는 문자들 중 하나와 일치해야 한다.
- _, 영문 대/소문자, 숫자, -, 그리고 + 문자가 포함될 수 있다.
- +는 앞의 문자 또는 그룹이 하나 이상 반복되어야 함을 의미한다.
-
(\\.[_A-Za-z0-9-]+)* : 점(.)으로 구분된 도메인 이름 섹션들이 0번 또는 그 이상(*) 반복될 수 있다.
- 각 섹션은 _, -, 그리고 영문 대/소문자와 숫자로 구성되어야 한다.
- \\.는 정규 표현식에서 점(.) 문자를 나타내기 위해 사용되는 이스케이프(escape) 시퀀스입니다.
- Java에서 역슬래시(\)는 이스케이프 문자로 사용되며, 정규 표현식 내에서 백슬래시를 사용하려면 두 번 연속으로 적어야 한다.
- 따라서 \\.은 실제로 \.을 나타내며, 여기서 백슬래시가 점 앞에 오므로 정규 표현식 엔진은 해당 패턴이 점(.) 문자 자체와 일치해야 한다.
**"john.doe**
-
@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)
-
- 앞의 패턴이 0번 이상 반복될 수 있음을 의미한다. 즉, 유저네임 다음에는 @ 기호가 와야 한다.
- @ : 이 부분은 이메일 주소에서 필수적으로 포함되어야 하는 @ 기호를 나타냅니다.
-
(\\.[A-Za-z]{2,}): 점(.)으로 시작하는 최상위 도메인 섹션을 나타낸다
◦ [A-Za-z]{2,}: 최소 2개 이상의 영문 대/소문자로만 구성된 문자열이다.
- .$: 문자열의 끝을 나타내는 앵커(anchor)이다. 즉, 입력된 값이 패턴의 끝과 일치해야 한다.
- "[email protected]"과 같이 유효한 형태의 문자열은 해당 정규 표현식에 매치하여 유효하다고 판단됩니다.
**@example.com**
Class
1)Class 란 ?
- Class<?> clazz는 해당하는 클래스 자체와 관련된 다양한 정보와 동작을 제공하는 객체이다.
- 리플렉션을 통해 실행 중인 프로그램에서 클래스에 대한 분석과 조작이 가능하게 해준다.
2)주요 기능
- 클래스의 메타데이터: clazz를 통해 해당 클래스의 메타데이터를 얻을 수 있다.
- 예를 들어, 클래스 이름, 패키지 정보, 접근 제어자, 상위 클래스 및 인터페이스 등의 정보를 알 수 있다.
- 필드 정보: clazz.getDeclaredFields() 메서드를 사용하여 해당 클래스에 선언된 필드들의 정보(필드 이름, 타입, 접근 제어자 등)를 얻을 수 있다.
- 메서드 정보: clazz.getDeclaredMethods() 메서드를 사용하여 해당 클래스에 선언된 메서드들의 정보(메서드 이름, 매개변수 타입 및 개수, 반환 타입 등)를 얻을 수 있다.
- 생성자 정보: clazz.getDeclaredConstructors() 메서드를 사용하여 해당 클래스에 선언된 생성자들의 정보(매개변수 타입 및 개수)를 얻을 수 있다.
- 주석(Annotation): clazz.getAnnotations() 또는 clazz.getDeclaredAnnotations() 메서드를 사용하여 해당 클래스에 적용된 주석(Annotation)들을 확인할 수 있다.
- 상속 관계와 인터페이스 구현: clazz.getSuperclass() 메서드로 상위 클래스의 정보와 clazz.getInterfaces() 메서드로 인터페이스 구현 목록을 확인할 수 있다.
- 기타 기능: 리플렉션 API인 Java Reflection을 활용하여 동적으로 객체 생성(newInstance())이나 필드 값 읽기/쓰기(getField(), setField()) 등 다양한 작업도 가능하다.