스프링/4. 스프링 MVC-2

78. 컨버전서비스 실제 사용

sdafdq 2023. 9. 23. 20:51

저번시간에 컨버터를 컨버전서비스에 등록하는 것 까지 해봤는데,

 

그래도 쓸 때는 우리가 직접 컨버전서비스를 생성해서 사용해서 불편했다.

 

무슨 말이냐 하면, 스프링에 등록하면 @RequestParam 이런 곳에도 자동으로 적용되어 우리가 등록한 컨버트 로직을 수행한다.

 

 

등록하는 방법은

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToIntegerConverter());
        registry.addConverter(new IntegerToStringConverter());
        registry.addConverter(new IpPortToStringConverter());
        registry.addConverter(new StringIpPortConverter());
    }
}

이렇게 addFormatters를 override 해서 registry에 등록하면 된다.

FormatterRegistry는 ConverterRegistry의 구현체 중 하나이다.

 

 

@GetMapping("/ip-port")
public String ipPort(@RequestParam IpPort ipPort){
    System.out.println("ipPort = " + ipPort);
    System.out.println("ipPort = " + ipPort.getIp());
    System.out.println("ipPort = " + ipPort.getPort());
    return "ok";
}

컨트롤러에 등록해서 테스트 해 보면

http://localhost:8080/ip-port?ipPort=127.0.0.0:8080

 

잘 된다.

 

 

이거는 @RequestParam, @ModelAttribute, @PassVariable 등 모두 다 적용이 된다.

 

참고로, @RequestParam에서 사용하는 ArgumentResolver가 실제로 ConversionService를 사용한다. @ModelAttribute 또한 마찬가지.

 

 

 

 

'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글

80. 포맷터  (0) 2023.09.24
79. 컨버터를 뷰 템플릿에 적용  (0) 2023.09.23
77. 컨버전 서비스  (0) 2023.09.23
76. 스프링 타입컨버터  (0) 2023.09.22
75. 스프링의 자동 타입 변환  (0) 2023.09.22