[Spring] org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int';
카테고리 없음 2020. 7. 31. 13:46에러 내역
더보기
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "${service-config의 특성 key}"
at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:77)
at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:54)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1085)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1059)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:583)
... 31 more
Caused by: java.lang.NumberFormatException: For input string: "${service-config의 특성 key}"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:569)
at java.lang.Integer.valueOf(Integer.java:766)
at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:208)
at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113)
at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:470)
at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:443)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:200)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:126)
at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:61)
... 35 more
상황
service-config.propertie의 내역을 ServiceConfig class로 불러 들여서 사용하는 상황이었고
해당 파라미터타입에 String, int가 있는 상황이었다.
원인
context 파일이 applicaion-context.xml 와 servlet-context.xml 두가지가 있었는데
placeholder bean은 application-context.xml에 적혀있었는데
servlet-context.xml의 base 패키지 범위에도 ServiceConfig가 들어가서 servlet-context에서 bean으로 등록할 때 placeholder 부분을 빈 문자값 ""로 읽어 오게 되어서
int 에 변환 할 때 타입 변환 Exception이 떨어지게 된 듯하다.
해결
servlet-context.xml 에서
변경 전
<context:component-scan base-package="com.text.spring" />
변경 후
<context:component-scan base-package="com.text.spring.web" />
base-package에 ServiceConfig가 들어가지 않도록 루트 경로를 잡아준다.