간단하다.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(new IpPortToStringConverter());
registry.addConverter(new StringIpPortConverter());
registry.addFormatter(new MyNumberFormatter());
}
}
이렇게 등록하면 된다.
참고로, 우선순위는 포맷터보다 컨버터가 먼저이다.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
<li>${number}: <span th:text="${number}" ></span></li>
<li>${{number}}: <span th:text="${{number}}" ></span></li>
<li>${ipPort}: <span th:text="${ipPort}" ></span></li>
<li>${{ipPort}}: <span th:text="${{ipPort}}" ></span></li>
</ul>
</body>
</html>
이걸 호출 해 보면,
@GetMapping("/converter-view")
public String converterView(Model model){
model.addAttribute("number",10000);
model.addAttribute("ipPort", new IpPort("127.0.0.0", 8080));
return "converter-view";
}
- ${number}: 10000
- ${{number}}: 10,000
- ${ipPort}: hello.typeconverter.type.IpPort@59cb0945
- ${{ipPort}}: 127.0.0.0:8080
이렇게 보다 시피 중괄호 두개로 묶은 것은 컨버팅을 하겠다는 소리인데, 우리가 등록한 데로 컨버팅이 일어났다.
또한,
@GetMapping("/hello-v2")
public String helloV2(@RequestParam Integer data){
System.out.println("data = " + data);
return "ok";
}
@RequestParam으로 받는 저것은 Integer타입이고,
http://localhost:8080/hello-v2?data=10,000
이렇게 콤마까지 하여 값을 줘도 알아서 포맷팅 되어 제대로 10000으로 정상 작동 한다.
우리가 @Configuration에 제대로 컨버팅 정보와 포맷팅 정보를 등록했기 때문에, @RequestParam, @ModelAttribute 등등이 알아서 저 포맷팅 및 컨버팅을 할 지 말지 검사하는 것이다.
'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글
84. 파일 업로드 (0) | 2023.09.24 |
---|---|
83. 스프링이 제공하는 기본 포맷터 (0) | 2023.09.24 |
81. 포맷터 스프링(컨버전서비스)에 등록 (0) | 2023.09.24 |
80. 포맷터 (0) | 2023.09.24 |
79. 컨버터를 뷰 템플릿에 적용 (0) | 2023.09.23 |