타입 컨버터는 말 그대로 타입을 바꿔주는.
문자 -> 숫자 등
타입을 변환해 줘야 할 일은 상당히 많다.
요청메시지의 모든 파라미터의 값은 사실 문자이다.
@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 등에 모두 적용이 된다.
'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글
77. 컨버전 서비스 (0) | 2023.09.23 |
---|---|
76. 스프링 타입컨버터 (0) | 2023.09.22 |
74. ControllerAdviece (0) | 2023.09.17 |
73. @ExceptionHandler API 예외 (0) | 2023.09.16 |
72. 스프링 내부에서 발생하는 예외를 처리해주는 Resolver (0) | 2023.09.15 |