2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[스프링] 스프링 Converter 스프링의 자동변환 정리

2023. 6. 4. 17:44ㆍ[자바]스프링

|  스프링 타입 컨버터란?

 

Http쿼리 스트링으로 전해지는 모든 것은 문자로 인식된다.

하지만 localhost:8080/test?itemId=10 처럼 쿼리스트링을 보냈을때, 컨트롤러에서는 Long itemId의 숫자 타입으로 입력받을 수 있다.

 

이처럼 형변환이 되려면 매개변수를 처리하는 과정에서 자동으로 호출되는 변환 기능이 있어야 한다. 

 

이것이 스프링 타입 컨버터이다

 

스프링 타입 컨버터의 아래의 어노테이션을 대상으로 사용 가능하다. 

 

- @RequestParam
- @ModelAttribute
- @PathVariable

 

대표적으로 스프링은 이 세 개의 어노테이션을 컨버터를 진행하게 된다.

 

예를들어 하나 알아보자.

 

 

 

나는 converter-test란 경로에 문자 10을 집어 넣을 예정이다.

instance of를 통해 10이라는 것이 숫자면 숫자라고 표시하고

숫자가 아니라면 숫자가 아니라고 표시 할 것 이다.

 

위에서 말했듯이 기본적으로 Http으로 전해지는 것은 "무조건" 문자 타입으로 입력되게 되고 

마찬가지로 컨트롤러에 들어올 때도 문자로 인식되게 된다.

하지만 스프링의 자동변환으로 문자가 숫자로 자동으로 변환되는 것 인데.. 한번 확인해보자

 

 

 

 

나는 url 경로에 10을 넣었다. 그렇다면 문자 "10"으로 인식되어 들어올 것 이다.

 

 

 

 

하지만 instance of로 확인해본 결과 이 "10"은 문자타입이 아니라 정수 타입이라고 한다.

 

 

 

그 이유는 @RequestParam 옆에 붙은 타입이 정수타입이기 때문에 스프링이 자동으로 타입을 변환 해준다.

boolean 타입으로도 되고 모든 타입으로 적용 시켜주는데

이렇게 변환 가능한 어노테이션은 

 

- @RequestParam
- @ModelAttribute
- @PathVariable

 

 

스프링에서 이 세 개 뿐임으로 유의해서 사용하도록 하자.

 

 

|   컨버터 들을 관리해주는 ConversionService

 

이렇듯 스프링에서 많은 컨버터들을 관리해주는 곳은 ConversionService에서 관리한다.

 

 

이렇듯 많은 컨버터 들을 모아놓은 곳이다. 이 컨버젼서비스 덕분에 우리는 일일이 변환하지 않아도

스프링이 자동으로 타입을 컨버전 시켜주는 것 이다.

 

 

|   객체타입은?

 

 

그럼 @ModelAtrribute로 객체 타입을 받게되면 어떻게 될까?

당연 우리가 커스텀해서 만든 객체 타입은 변환 할 수 없다.

스프링이 어떻게 우리가 만든 객체들을 일일이 확인해서 변환 해 줄 것인가.