본문 바로가기
Spring Framework/SPRING MVC

Formatter (포맷터)

by 거북이의 기술블로그 2024. 10. 8.
Formatter...

 

Formatter 란?

  • Converter의 심화 버전
  • Converter의 경우 제한이 없는 변환이 가능 (ex 문자 <-> 객체 , 숫자 <-> 객체  등등..)
  • Formatter의 경우 문자를 기준으로 변경하는 것을 의미 ( 문자 <-> 객체 , 문자 <-> 숫자 , 문자를 기준으로 변경)

 

Formatter 인터페이스

public interface Formatter<T> extends Printer<T>, Parser<T> {
}

public interface Printer<T> {
    String print(T object, Locale locale);
}

public interface Parser<T> {
    T parse(String text, Locale locale) throws ParseException;
}

 

  • Formatter 숫자 구현 ( 문자 <-> 숫자 )
    • 1000 -> 1,000 형식으로 변경
    • NumberFormat 자바에서 기본으로 제공해주는 클래스
    • Integer, Long 과 같은 숫자타입의 부모 Number 객체 사용
public class MyNumberFormatter implements Formatter<Number> {
    
    @Override
    public Number parse(String text, Locale locale) throws ParseException {
        NumberFormat format = NumberFormat.getInstance(locale);
        return format.parse(text);
    }
    
    @Override
    public String print(Number object, Locale locale) {
        return NumberFormat.getInstance(locale).format(object);     
    }
}

 

 

Formatter 등록

 @Configuration
 public class WebConfig implements WebMvcConfigurer {
     
     @Override
     public void addFormatters(FormatterRegistry registry) {
         registry.addConverter(new MyNumberFormatter());
     }
}
  • Convert 등록과 동일
  • 단, converter도 등록이 동일하기에 우선적으로 converter가 적용된다 ( 동일 기능에 있어서는 converter가 우선적용 )

 

 

스프링이 제공하는 포맷터

  • @NumberFormat
    • 숫자 관련 형식 지정 포멧터 사용
  • @DateTimeFormat
    • 날짜 관련 형식 지정 포멧터 사용
@Controller
public class FormatterController{
     
     @Data
     static class Form{
         
         @NumberFormat(pattern = "###,###")
         private Integer number;
         
         @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
         private LocalDateTime localDateTime;
     }
     
     @GetMapping("/formatter")
     public String formGetMethod(Model model){
         Form form = new Form();
         
         form.setNumber(10000);
         form.setLocalDateTime(LocalDateTime.now());
         
         model.addAttribute("form", form);
         return "formatter-form";
    }
    
    @PostMapping("/formatter")
    public String formPostMethod(@ModelAttribute Form form){
        return "formatter-view";
    }
}

 

 

'Spring Framework > SPRING MVC' 카테고리의 다른 글

파일 업로드  (1) 2024.10.08
Spring Type Converter (타입 형변환)  (0) 2024.10.08
예외처리 (API)  (0) 2024.10.07
예외처리 (web page)  (0) 2024.10.07