타입 컨버터
스트링으로 들어옴->직접 타입 변환
- 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