Bepoz
파즈의 공부 일기
Bepoz
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • 공부 기록들 (85)
      • 우테코 (17)
    • Spring (85)
    • Java (43)
    • Infra (17)
    • 책 정리 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Bepoz

파즈의 공부 일기

2020.04.21 MVC(7) (JSR-303, JSR-380, Validator 커스터마이징, Interceptor)
공부 기록들

2020.04.21 MVC(7) (JSR-303, JSR-380, Validator 커스터마이징, Interceptor)

2020. 4. 21. 23:46

JSR-303 어제 했던 연장으로 하겠다. 

똑같다 방식은. 어제는 Max 와 Size를 했었다.

오늘은

@AssertTrue : true가 아닌 값이 들어오면 오류

@AssertFalse : false가 아닌 값이 들어오면 오류

@Max(값) : 값 보다 큰 값이 들어오면 오류

@Min(값) : 값 보다 작은 값이 들어오면 오류

@DecimalMax(value=값, inclusive=true/false) : 값보다 작거나 같은 값이 들어와야 한다. inclusive 가 false면 값은 포함하지 않는다. 생략하면 true 이다.

@DecimalMin(value=값, inclusive=true/false): 상동. min과 max는 이상 이하 이다. 이건 보통 초과 미만 때 사용한다.

@Null : 값이 들어오면 오류가 발생

@NotNull : 값이 들어오지 않으면 오류가 발생

@Digits(integer=자릿수, fraction = 자릿수) : 지정된 자릿수의 숫자가 아닐 경우 오류가 발생. Integer는 정수 자릿수 fraction 은 소숫점 자릿수이다.

@Size(min=글자 수,max=글자 수) : 지정된 글자 수 보다 짧거나 길면 오류가 발생

@Pattern(regexp=정규식):주어진 정규식에 위배되면 오류 발생

 

ServletAppContext.java에 message 등록은 기본~

 

@Pattern(regexp="[a-zA-Z]*") 와 같이 이용한다. 알파벳만 받는다는 뜻이다.

 

JSR-380 도 방식은 같으니 어떤 것이 있는지만 보자.

 

@NotEmpty : 주입된 값의 길이가 0이면 오류 발생. 공백도 글자로 인식한다.

@NotBlank : 주입된 값이 공백을 제거하고 길이가 0이면 오류 발생

@Positive : 양수가 아니라면 오류 발생

@PositiveOrZero : 0 또는 양수가 아니라면 오류 발생

@Negative : 음수가 아니라면 오류 발생

@NegativeOrZero : 0 또는 음수가 아니라면 오류 발생

@Email : 이메일 형식이 아니라면 오류 발생. 중간에 @가 있는지 정도만 확인한다.

 

이제 JSR-303 308이 아닌 커스텀해서 내가 원하는 유효성 검사를 해보자.

 

먼저 Validator 인터페이스를 구현해야 한다.

패키지를 만들고 내부에 validator 클래스를 만들자 나는 DataBean1Validator.java로 만들었다.

그리고 validator를 implements를 한 후에 메서드를 Override 한다.

 

supports 메서드는 유효성 검사할 데이터를 가지고 있는 객체가 유효성 검사가 가능한지를 확인한다.

validate 메서드는 유효성 검사를 하는 메서드이다.

 

그리고 이 validator를 controller에 등록해 준다. controller 자바에 다음과 같이 기입한다.

여러개면 binder.addValidators 를 이용한다.

이 메서드가 @Validate 붙은 빈 객체들을 가지고 와서 validator 해준다.

@Validate 가 붙은 객체들은

다음 validate 메서드의 Object 'target' 으로 들어오게 된다.

 

이제 들어온 값들에 대해 간단히 검사를 해줄 수가 있다.

ValidationUtils.rejectIfEmpty(errors,"data2","error2");

는 값이 비어있는지 확인한다. 공백도 글자로 취급한다. data2 를 검사하고 만약 에러가 있으면 이 에러를 error2로

호칭한다.

밑에는 공백만 있어도 에러가 뜬다.

이렇게 입력값에 문제가 있으면 error 객체에 오류정보를 저장하고, 사용할 오류 메세지는

"코드이름(error2같은).bean객체 이름.프로퍼티이름(data2 같은) 으로 구성이 된다.

 

error_message.properties 에 

'error3.dataBean1.data3= data3은 공백을 제외하고 길이가 0보다 커야 합니다.'

다음과 같이 적을 수 있겠다.

 

객체를 받아온 object를 형변환 시켜서 data 값을 뽑아내고

if 문으로 유효성 검사를 해주고 위배시에 rejectValue를 통해 오류 정보를 저장한다.

errors.rejectValue("프로퍼티이름","코드이름") 이렇게 저장한다.

 

그런데 이거를 하게되면 기존의 JSR 이 자꾸 안먹힌다 이상하다 이 부분은 아직 모르겠다.

ㄴ  이거 setValidator 말고 addValidators 방식으로 넣으면 해결된다.

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Interceptor

 

* 요청 발생 시 호출되는 메서드의 코드가 중복 되는 부분이 있을 때 Interceptor를 통해 처리하게 된다.

* 로그인 여부 확인, 권환 확인 등의 작업을 처리할 때 많이 사용된다.

 

먼저, Interceptor 는 HandlerInterceptor 인터페이스를 구현하거나,

HandlerInterceptorAdapter를 상속받은 클래스를 만들고 다음의 메서드를 구현한다.

1.preHandle : Controller의 메서드가 호출되기 전 호출된다.

2.postHandle : Controller의 메서드의 수행이 완료되고 view 처리를 수행하기 전에 호출된다.

3.afterCompletion : view 처리까지 완료되고 응답결과가 브라우저로 전달되기 전에 호출된다.

 

TestController.java 에는 test1 와 test2 getmapping 이 들어오면 각 test1,test2를 print 해주는 코드로 설정해놨다.

 

각 Testinterceptor숫자  java파일은 다음과 같이 하였다.

다음은ServletAppContext.java 파일에 등록한 코드이다.

 

addInterceptors 메서드를 이용한다. 등록할 각 객체를 만들고, 

InterceptorRegistration reg1=registry.addInterceptor(inter1); 다음과 같이 등록한다. 이 순서가 실행되는 순서이다.

그리고 패턴에 맞게 reg1.addPathPatterns() 로 설정한다.

캡처처럼 reg4로 여러개를 등록할 떄에는 ',' 로 끊어서 등록하면 된다.

/* 에서 * 는 1덩이를 뜻한다. 어떤 것이든 한 덩이면 다 해당이된다. 하지만 만약 /sub1/test1 이런거라면 안되겠다.

/  하고 아무것도 없는 첫화면에도 당연히 된다. 그런데 그 다음줄에 exclude 로 / 하나는 뺏기때문에 메인화면에서는 되지 않는다.

 

이것이 /** 로 등록을 할 경우엔 그냥 / 이후 모든거 다 된다는 뜻이다.

 

다음은 xml 등록방법이다. 맨 위에 inter1 를 기준으로 등록해놓고 path 써놓고 ref bean 으로 inter1 을 등록한 것도 있고, 1번만 쓸거여서 즉석에서 beans:bean class 로 등록해준 것이 있는 것을 볼 수가 있다.

 

다음과 같이 나온다. 아 postHandle 과 afterCompletion은 등록 순서의 반대로 나오게 된다.

 

오늘은 요까지 끝~

'공부 기록들' 카테고리의 다른 글

2020.04.24 - 미니프로젝트(1) (틀 구성하고 페이지 연결하기)  (0) 2020.04.24
2020.04.22~23 - MVC(8) (예외처리, MyBatis Java, MyBatis XML, RestController)  (0) 2020.04.23
2020.04.20 MVC(6) (쿠키, 유효성 검사, JSR-303)  (0) 2020.04.20
2020.04.17 MVC(5) ( SessionScope, ApplicationScope)  (0) 2020.04.17
2020.04.16 MVC(4) ( Bean 주입 java/xml, form 태그, redirect, forward, requestScope )  (0) 2020.04.17
    '공부 기록들' 카테고리의 다른 글
    • 2020.04.24 - 미니프로젝트(1) (틀 구성하고 페이지 연결하기)
    • 2020.04.22~23 - MVC(8) (예외처리, MyBatis Java, MyBatis XML, RestController)
    • 2020.04.20 MVC(6) (쿠키, 유효성 검사, JSR-303)
    • 2020.04.17 MVC(5) ( SessionScope, ApplicationScope)
    Bepoz
    Bepoz
    https://github.com/Be-poz/TIL

    티스토리툴바