728x90
반응형
2020/03/25 - [프로그래밍 노트/SPRING] - [Spring] 데이터 바인딩 - PropertyEditor
Converter
- S타입을 T타입으로 변환할 수 있는 매우 일반적인 변환기
- 상태 정보 없음 == Stateless == 쓰레드 세이프
ConverterRegistry
에 등록해서 사용
public class EventConverter {
// Converter<Source, Target> 인터페이스를 구현 (Source -> Target 변환)
public static class StringToEventConverter implements Converter<String, Event> {
@Override
public Event convert(String str) {
return new Event(Integer.parseInt(str));
}
}
}
SpringMVC에서 Converter를 사용한다면, Config 클래스에서 Converter를 추가해준다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new EventConverter.StringToEventConverter());
}
}
Formatter
- PropertyEditor 대체
- Object와 String간의 변환을 담당한다.
- 문자열을 Locale에 따라 다국화하는 기능도 제공한다. (optional)
FormatterRegistry
에 등록해서 사용
public class EventFormatter implements Formatter<Event> {
@Override
public Event parse(String text, Locale locale) throws ParseException {
return new Event(Integer.parseInt(text));
}
@Override
public String print(Event object, Locale locale) {
return object.getId().toString();
}
}
Config클래스에서 Formatter를 추가해준다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(new EventFormatter());
}
}
ConversionService
- 실제 변환 작업은 이 인터페이스를 통해서 쓰레드-세이프하게 사용할 수 있음
- 스프링 MVC, 빈(value) 설정, SpEL에서 사용한다.
- DefaultFormattingConversionService (ConversionService 구현체)
- FormatterRegistry
- ConversionService
- 여러 기본 Converter와 Formatter 등록해줌
스프링 부트
- 웹 애플리케이션인 경우에 DefaultFormattingConversionService를 상속하여 만든
WebConversionService
를 빈으로 등록해 준다. - Formatter와 Converter빈을 찾아 자동으로 등록해준다. ⇒ SpringWebMvc설정을 할필요가 없음
728x90
반응형
'프로그래밍 노트 > SPRING' 카테고리의 다른 글
[Spring] 스프링 AOP_1 : 개념소개 (0) | 2020.03.29 |
---|---|
[Spring] SpEL(스프링 Expression Language) (0) | 2020.03.29 |
[Spring] 데이터 바인딩 - PropertyEditor (0) | 2020.03.25 |
[Spring] Validation 추상화 (0) | 2020.03.24 |
[Spring] ResourceLoader, Resource 추상화 (0) | 2020.03.22 |