본문 바로가기
스프링

타입 컨버터

by moonstal 2022. 6. 20.

타입 컨버터

  • 스트링으로 들어옴->직접 타입 변환

    • String data = request.getParameter("data")
  • 스프링이 중간에서 타입 변환

    • @RequestParam Integer data
    • @ModelAttribute UserData data
    • @PathVariable("userId") Integer data
  • 컨버터 구현(String->Integer)

    public class StringToIntegerConverter implements Converter<String, Integer> {
        @Override
        public Integer convert(String source) {
            log.info("convert source={}", source);
            return Integer.valueOf(source);
        }
    }

컨버전 서비스

  • 개별 컨버터 모아둠
  • 구현
    DefaultConversionService conversionService = new DefaultConversionService();
    //등록
    conversionService.addConverter(new StringToIntegerConverter());
    //사용
    conversionService.convert("10",Integer.class);

스프링에 Converter 적용

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addFormatters(FormatterRegistry registry) {
            registry.addConverter(new StringToIntegerConverter());
        }
    }

뷰 템플릿에 컨버터 적용

    //객체 담기
    model.addAttribute("ipPort", new IpPort("127.0.0.1", 8080));

    //출력
    th:text="${ipPort}" : hello.typeconverter.type.IpPort@59cb0946
    th:text="${{ipPort}}": 127.0.0.1:8080  //IpPortToStringConverter적용

Formatter

  • Converter: 범용(객체->객체)

  • Formatter: 문자에 특화(객체->문자 print, 문자->객체 parse) + 현지화(Locale)

  • print: NumberFormat.getInstance(locale).parse(text);

  • parse: NumberFormat.getInstance(locale).format(object);

  • 포맷터 지원하는 컨버전 서비스

    //컨버터 포맷터 모두 사용가능
    DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
    conversionService.addFormatter(new MyNumberFormatter());
    conversionService.convert(1000,String.class);
  • 포맷터 적용: WebConfig-addFormatters()에 registry.addFormatter(new MyNumberFormatter()); 등록
  • 스프링이 제공하는 기본 포맷터
    @NumberFormat(pattern = "###,###")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

링크

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2

'스프링' 카테고리의 다른 글

[스프링 부트와 JPA 활용] 웹 애플리케이션 개발  (0) 2022.06.22
파일 업로드  (0) 2022.06.21
예외 처리  (0) 2022.06.19
로그인  (0) 2022.06.18
검증  (0) 2022.06.17