Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[TypeConverter] Spring에Converter 적용 본문

인프런/[인프런] 스프링 MVC 2

[TypeConverter] Spring에Converter 적용

Seung__ 2021. 10. 1. 23:28

1. Spring에 Converter 등록


  • addFormatters() 이용
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addFormatters(FormatterRegistry registry) {

        registry.addConverter(new StringToIntegerConverter());
        registry.addConverter(new StringToIpPortConverter());
        registry.addConverter(new IntegerToStringConverter());
        registry.addConverter(new IpPortToStringConverter());
        
    }
}

 

 

2. 사용


  • controller
    @GetMapping("/hello-v2")
    public String helloV2(@RequestParam Integer data){
        System.out.println("data = " + data);
        return "ok";
    }
  • localhost:8080/hello-v2?data=10
  • StringToIntegerConverter가 선택됨.
2021-10-01 23:16:09.402  INFO 21888 --- [nio-8080-exec-9] h.t.converter.StringToIntegerConverter
: convert source= 10
data = 10
  • 어 근데 String->Integer는 내가 등록하지 않았어도 잘 쓰고 있었따.
  • Spring  내부에는 다양한 Converter 제공함. String->Integer도 당연히 있음.
  • 즉 별도로 추가한 Converter가 우선순위를 갖는다.

 

 

3. 직접 만든 converter 사용


  • Controller
    @GetMapping("/ip-port")
    public String ipPort(@RequestParam IpPort ipPort){
        System.out.println("ipPort.getIp() = " + ipPort.getIp());
        System.out.println("ipPort.getPort() = " + ipPort.getPort());
        return "ok";
    }
  • http://localhost:8080/ip-port?ipPort=127.0.0.1:8080
  • @RequestParam으로 ipPort를 받는다.
  • 따라서 queryParameter로 ipPort=127.0.0.1:8080을 넘겨준다. 
  • StringToIpConverter가 선택되었고, 변환도 의도대로 되었다.
2021-10-01 23:22:07.922  INFO 25672 --- [nio-8080-exec-1] h.t.converter.StringToIpPortConverter
: converter source = 127.0.0.1:8080
ipPort.getIp() = 127.0.0.1
ipPort.getPort() = 8080
  • 처리 과정
    • @RequestParam 은 @RequestParam 을 처리하는 
    • ArgumentResolver 인 RequestParamMethodArgumentResolver 에서 
    • ConversionService 를 사용해서 타입을 변환한다.
    • 부모 클래스와 다양한 외부 클래스를 호출하는 등 복잡한 내부 과정을 거친다.

 

 

4. GitHub : 211001 Spring & Converter


 

GitHub - bsh6463/TypeConverter

Contribute to bsh6463/TypeConverter development by creating an account on GitHub.

github.com

 

Comments