3.5.1 Formatter SPI
필드 포맷팅 로직을 구현하는 FormatterSPI는 간단하고 강력하게 작성됩니다. 다음 목록은 Formatter인터페이스 정의를 보여줍니다.
package org.springframework.format;
public interface Formatter<T> extends Printer<T>, Parser<T> {
}Formatter는 Printer및 Parser빌딩 블록 인터페이스에서 확장됩니다. 다음 목록은 이 두 인터페이스의 정의를 보여줍니다.
public interface Printer<T> {
String print(T fieldValue, Locale locale);
}import java.text.ParseException;
public interface Parser<T> {
T parse(String clientValue, Locale locale) throws ParseException;
}자신의 Formatter를 만들려면, 앞에서 설명한 Formatter인터페이스를 구현하십시오. T를 포맷 화 하려는 객체의 타입으로 매개 변수 화 하십시오. (예: java.util.Date) print()작업을 구현하여 T의 인스턴스를 프린트하여 클라이언트 로컬에 표시합니다. parse()작업을 구현하여 클라이언트 로컬에서 반환된 포맷 화된 표현으로부터 T의 인스턴스를 Parsing 하십시오. Parsing 작업이 실패하면 Formatter는 ParseException또는 IllegalArgumentException을 던져야 합니다. Formatter구현이 thread-safe인 지 확인하십시오.
format서브 패키지는 편의상 여러 가지 Formatter구현을 제공합니다. number패키지는 java.text.NumberFormat을 사용하는 Number 객체를 포맷 화 하기 위해 NumberStyleFormatter, CurrencyStyleFormatter및 PercentStyleFormatter를 제공합니다. datetime패키지는 java.text.DateFormat으로 java.util.Date 객체를 포맷 화하는 DateFormatter를 제공합니다. datetime.joda패키지는 Joda-Time library를 기반으로 포괄적인 datetime 포맷팅 지원을 제공합니다.
다음의 DateFormatter는 Formatter구현의 예 입니다.
package org.springframework.format.datetime;
public final class DateFormatter implements Formatter<Date> {
private String pattern;
public DateFormatter(String pattern) {
this.pattern = pattern;
}
public String print(Date date, Locale locale) {
if (date == null) {
return "";
}
return getDateFormat(locale).format(date);
}
public Date parse(String formatted, Locale locale) throws ParseException {
if (formatted.length() == 0) {
return null;
}
return getDateFormat(locale).parse(formatted);
}
protected DateFormat getDateFormat(Locale locale) {
DateFormat dateFormat = new SimpleDateFormat(this.pattern, locale);
dateFormat.setLenient(false);
return dateFormat;
}
}스프링 팀은 커뮤니티 중심의 Formatter기여를 환영합니다. 기여하려면 GitHub Issues를 참조하십시오.
Last updated
Was this helpful?