/** * A converter converts a source object of type {@code S} to a target of type {@code T}. */ @FunctionalInterface publicinterfaceConverter<S, T> {
/** * Convert the source object of type {@code S} to target type {@code T}. * @param source the source object to convert, which must be an instance of {@code S} (never {@code null}) * @return the converted object, which must be an instance of {@code T} (potentially {@code null}) * @throws IllegalArgumentException if the source cannot be converted to the desired target type */ @Nullable T convert(S source);
//문자를 객체로 변경 @Override public Number parse(String text, Locale locale)throws ParseException { log.info("text = {}, locale = {}",text,locale); // "1000" -> 1000 NumberFormat format = NumberFormat.getInstance(locale); return format.parse(text); } // 객체를 문자로 변경 @Override public String print(Number object, Locale locale){ log.info("text = {}, locale = {}",object,locale); return NumberFormat.getInstance(locale).format(object); } }
ConversionService
위와 같은 개별 converter를 묶어서 편리하게 사용할 수 있는 기능을 제공해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
package org.springframework.core.convert;
/** * A service interface for type conversion. This is the entry point into the convert system. * Call {@link #convert(Object, Class)} to perform a thread-safe type conversion using this system. */ publicinterfaceConversionService{
controller에서 model 객체에 converting 할 객체를 담아서 보내면, thymeleaf template engine에서 등록된 converter를 사용해서 다음과 같이 convert 할수 있다.
이떄 converter를 사용하려면 { { converting 대상 } } 을입력한다. 또는 th:field로도 꺼내 사용할 수 있다.
1 2 3 4
<!-- converter 사용 전--> <li>${ipPort}: <spanth:text="${ipPort}" ></span></li> <!-- converter 사용 후 --> <li>${{ipPort}}: <spanth:text="${{ipPort}}" ></span></li>
참고사항
아래와 같이 annotaion을 활용해서 지정해둔 패턴으로 객체를 문자로 , 문자를 객체로 변환해주는 formatter 사용을 지원해준다.