일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 서비스 디스커버리
- 스프링 시큐리티
- docker-compose
- Logback
- Gradle
- 주울
- 달팽이
- 플로이드 와샬
- BFS
- 완전 탐색
- 유레카
- Spring Cloud Config
- 이분 탐색
- 트리
- 구간 트리
- 비트마스킹
- spring boot
- 도커
- 구현
- spring cloud
- 다익스트라
- 스택
- 메모이제이션
- 이분 매칭
- ZuulFilter
- 백트래킹
- Java
- 게이트웨이
- Zuul
- dp
- Today
- Total
Hello, Freakin world!
[Spring Boot] PropertyEditor 에 대해서(feat. Converter, Formatter) 본문
[Spring Boot] PropertyEditor 에 대해서(feat. Converter, Formatter)
johnna_endure 2019. 12. 24. 16:12용도
서버에서 웹 요청을 처리할 때, 값을 객체에 바인딩하고 싶은 경우가 있다.
예를 들어 다음과 같은 요청이 있다고 하자.
GET /user/{code}
1323323에 해당하는 값을 Code라는 객체로 싸여져 있는 형태로 바인딩한다고 하자.
이렇게 String 형식의 값을 임의의 객체의 속성에 바인딩하고 싶을 때, PropertyEditor를 사용한다.
알아야 할 필요성이 있나?
이 PropertyEditor는 쓸 일은 거의 없다. Spring 3부터 Converter나 Formatter를 이용한 더 나은 대안이 나왔고,
스프링의 웹 요청 바인딩 애너테이션 @RequestParam, @RequestBody 등도 많은 변환을 지원하기 때문에 더더욱 쓸일이 없다.
그래도 만약 필요하다면 아래 글에 PropertyEditor 부분을 읽어보도록 하자.
스프링 레퍼런스
PropertyEditor, Converter, Formatter의 기본적인 사용 패턴
PropertyEditor는 뒤의 두 가지와는 사용 방법이 약간 다르다.
우선 editor역할의 클래스는 ProperyEditorSupport 라는 클래스를 상속해야한다.
그리고 @InitBinder라는 애너테이션을 이용. WebDataBinder라는 클래스를 메서드 인수로 받아 여기에 커스텀 에디터를 등록한다.
등록시, 타겟 클래스 타입과 에디터의 인스턴스를 넘겨주면 작동한다.
자세한 예제는 이 글의 코드를 참고하자. PropertyEditor 예제
그리고 Converter와 Formatter의 사용 방법은 동일하다.
먼저 Converter와 Formatter 인터페이스를 구현하고, 이를 WebMvcConfigurer 인터페이스를 구현한 설정 빈 클래스(@Configuration)에서 addFormatters에 컨버터, 포매터 구현 인스턴스를 추가한다.
참고
LocalDateTime 등 자바8에서 지원하는 시간 클래스들의 바인딩에 대해
PropertyEditor, Converter, Formatter 등에 관해 조사하기 시작한 것도 위 이슈때문이었다.
하지만 웹 요청데이터가 표준 Date 포맷(ISO)을 유지한다면 스프링은 자동으로 String을 자동으로 LocalDateTime에 바인딩해주는 걸 확인하고, 파고들기를 중단했다.
'Spring boot' 카테고리의 다른 글
[Spring boot] AOP 용어 정리 (0) | 2020.07.16 |
---|---|
[Spring boot] Validation 후, AOP 이용해서 예외처리 하기 (0) | 2020.07.14 |
@RestControllerAdvice 를 이용해서 예외 처리하기 (0) | 2020.07.12 |
[Spring boot] 상황에 맞는 Profile 적용하기 (0) | 2020.06.15 |
[Spring boot] @Value 에 대해서 (0) | 2019.12.20 |