[Spring] Resource & Validation

Junseo Kim·2020년 1월 26일
0

Resource 추상화

java.net.URL 이라는 클래스를 org.springframework.core.io.Resource라는 클래스로 감싸서 실제 low 레벨에 있는 Resource에 접근하는 기능을 만든 것

Resource 자체를 추상화 시킨 것이다.(가져오는 방법은 ResourceLoader를 사용한다 https://velog.io/@max9106/Spring-ResourceLoader-c6k5tz9x6e)

메서드

Resource 객체는 여러가지 메서드가 있다.

exists(): 존재하는 지 여부 확인
isOpen(): 열 수 있는 지 확인
getDescription(): 파일이름, 실제 URL

이외에도 여러가지 메서드들이 존재한다.

구현체

Resource의 구현체도 여러가지가 있다.

UrlResource: 기본으로 지원하는 프로토콜(http, https, ftp etc)
ClassPathResource: classpath 접두어 사용
FileSystemResource
ServletContextResource: 가장 많이 사용

리소스를 읽어올 때, ApplicationContext의 타입에 따라 어떤 구현체로 resolving 되는지 결정된다.

만약 var context = new FileSystemXmlApplicationContext("~~.xml"); 이 ApplicationContext 타입을 사용하면 FileSystemResource로 resolving 되는 것이다.

ApplicationContext 타입에 상관없이 Resource타입을 강제하고 싶을 땐 접두어를 사용해주면 된다.(접두어를 사용하지 않으면 ServletContextResource로 Resouce 타입이 정해진다)

스크린샷 2020-01-26 오후 1.13.25.png

Validation 추상화

어플리케이션에서 사용하는 객체들을 검증할 때 사용하는 인터페이스이다.

이 인터페이스를 구현하려면 2가지 메서드를 구현해주어야한다.

supports 메서드: 검증해야하는 인스턴스의 클래스가 validator가 지원하여 검증할 수 있는 클래스인지 확인하는 메서드

validate 메서드: 실질적으로 검증작업이 일어나는 곳

예제

내부에 id와 title이라는 값을 가지고 있는 Event라는 클래스가 있다고 할 때, title 값이 비어있으면 안된다는 조건이 있을 때, validator를 사용할 수 있다.

내부에 id와 title이라는 값을 가지고 있는 Event라는 클래스를 아래와 같이 만들어 줄 수 있다.

스크린샷 2020-01-27 오전 3.56.22.png

title 값이 비어있으면 안되기 때문에 Validator를 만들어 준다. 위에서 말한 것 처럼 supports와 validate 두 가지 메서드를 구현해주어야한다.

스크린샷 2020-01-27 오전 3.57.43.png

supports 메서드에서 파라미터로 전달되는 aClass의 타입이 우리가 임의로 만들어준 클래스인지 확인해준다.

스크린샷 2020-01-27 오전 4.00.09.png

실제로 검증작업이 일어나는 validate에는 rejectIfEmptyOrWhiteSpace를 사용하여, 비어있으면 안된다는 걸 나타내준다.
(field는 event객체의 String title;을 가리키고, errorCode는 에러(여기서는 title값이 비어있을 때 에러 발생)가 났을때, 그 에러를 나타내는 key값이다.)

스크린샷 2020-01-27 오전 4.11.11.png

title에 값을 넣어주지 않고, 메인에서 실행해보면,

스크린샷 2020-01-27 오전 4.16.32.png

error가 발생하므로, true가 출력된다.
아까 설정해준 errorCode(notempty)에서 파생된 errorCode값들도 출력되고, defaultMessage 값도 마찬가지로 출력됨을 볼 수 있다.

스크린샷 2020-01-27 오전 4.17.01.png

요즘에는 위의 방식보다는 어노테이션을 사용한 방법을 더 많이 사용한다.

Validator를

EventValidator eventValidator = new EventValidator();

이렇게 직접 생성하는 대신, 의존성 주입을 받고,

@Autowired
Validator validator; 

주입받은 validator의 validate 메서드로 검증한다.

validator.validate(event, errors);

검증받는 event 객체에는 여러 어노테이션을 사용하여, 검증작업을 거친다.

스크린샷 2020-01-27 오전 4.42.36.png

0개의 댓글