본문 바로가기

카테고리 없음

[Spring] 데이터 바인딩 추상화 : Converter와 Formatter

반응형

| Converter와 Formatter

DataBinder의 단점을 보완하기 위해 Spring3.0 이후부터 Converter와 Formatter가 도입 되었다.

| Converter

  • S 타입을 T 타입으로 변환할 수 있는 매우 일반적인 변환기.
  • 상태정보가 없기 때문에 Thread-Safe 함
  • ConverterRegistry에 둥록해서 사용
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

public class EventConverter {

    @Component
    public static class StringToEventConverter implements Converter<String, Event> {
        @Override
        public Event convert(String source) {
            return new Event(Integer.parseInt(source));
        }
    }

    @Component
    public static class EventToStringConverter implements Converter<Event, String> {
        @Override
        public String convert(Event source) {
            return source.getId().toString();
        }
    }
}

| Formatter

  • PropertyEditor 대체제 (PropertyEditor는 이 글 참조
  • Object와 String 간의 변환을 담당
  • 문자열을 Locale에 따라 다국화하는 기능도 제공한다. (optional)
  • FormatterRegistry에 등록해서 사용

 

 

import org.springframework.format.Formatter;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.util.Locale;

@Component
public class EventFormatter implements Formatter<Event> {

    @Override
    public Event parse(String s, Locale locale) throws ParseException {
        return new Event(Integer.parseInt(s));
    }

    @Override
    public String print(Event event, Locale locale) {
        return event.getId().toString();

    }
}

| Converter와 Formatter 중 어떤것을 사용해야 할까?

  • 둘 다 사용해도 무관
  • 다양한 타입으로 변환 할 때는 위해서는 Converter를 사용
  • 웹 어플리케이션에서는 일반적으로 구현이 간단한 Fornatter를 많이 사용

| ConversionService

 

| WebConversionService

 

반응형