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

75. 스프링의 자동 타입 변환

sdafdq 2023. 9. 22. 19:52

타입 컨버터는 말 그대로 타입을 바꿔주는.

문자 -> 숫자 등

 

 

타입을 변환해 줘야 할 일은 상당히 많다.

 

요청메시지의 모든 파라미터의 값은 사실 문자이다.

 

@GetMapping("/hello-v1")
public String helloV1(HttpServletRequest request){
    String data = request.getParameter("data");
    Integer intValue = Integer.valueOf(data);
    System.out.println("intValue = " + intValue);
    return "ok";
}

그렇기에 이렇게 필요에 따라 숫자로 변환 해 줘야 한다.

 

 

근데 아무래도 스프링은 이런 것을 자동으로 해 준다.

예시로

@GetMapping("/hello-v2")
public String helloV2(@RequestParam Integer data){
    System.out.println("data = " + data);
    return "ok";
}

이렇게 @RequestParam으로 키의 이름과 변수의 이름을 잘 맞추면,

 

https://qwefdg3.tistory.com/265

@ModelAttribute는 심지어 마찬가지로 키의 이름과 변수의 이름만 잘 맞춰주면 값을 잘 맞춰서 객체로도 변환시켜준다.

(원리는 먼저 객체를 생성한 다음, 그 객체에 setㅁㅁㅁ() 해서 키의 이름에 맞게 잘 넣어준다. 그래서 객체의 멤버가 될 변수 이름에 키의 이름을(html  문서의 name을) 잘 맞춰줘야 한다. )

 

@PathVariable도 

@PathVariable("id") Integer id

이렇게 받으면 알아서 숫자로 바꿔준다.

 

@Value, XML에 넣은 스프링 빈 정보, 또 뷰를 랜더링 할 때도 상당히 많은 부분의 타입 변환을 스프링이 자동으로 지원해 준다.

 

객체까지도 타입변경을 할 수 있는데, 모든 타입을 어떤타입이든지 형식만 맞으면 변경할 수 있다.

 

 

기존 스프링 작동 방식은 애노테이션을 쓰던지 아니면 스프링의 인터페이스나 클래스를 상속받던지 해서 만들고, 그걸 스프링에 등록한다.

 

이와 마찬가지로 개발자가 만약 새로운 타입을 만들어서 변환하고 싶으면 

스프링이 제공하는

Converter<S, T> 인터페이스를 상속받고 구현한 다음 스프링에 등록해주면 된다.

 

그러면, 기존의 @RequestParam, @ModelAttribute, @PathVariable 등에 모두 적용이 된다.