Java에서 java.lang.Integer cannot be cast to java.lang.String
오류는 주로 정수를 문자열로 캐스팅하려 할 때 발생합니다. 이 문제를 해결하려면 다음 단계를 따르세요:
1. 코드 검토 및 수정
먼저, 오류가 발생하는 부분의 코드를 확인하세요. 일반적으로 데이터 타입을 혼동하여 발생하는 경우가 많습니다. 예를 들어, 정수 값을 문자열로 변환하려고 할 때 이 오류가 발생할 수 있습니다. 다음과 같은 코드를 검토해 보세요:
Object value = 123;
String strValue = (String) value; // 이 부분에서 오류 발생
위 코드에서는 정수 값을 문자열로 직접 캐스팅하려 하기 때문에 오류가 발생합니다. 이를 해결하려면 String.valueOf()
메서드를 사용하여 정수 값을 문자열로 변환해야 합니다:
Object value = 123;
String strValue = String.valueOf(value);
2. instanceof 사용
instanceof
연산자를 사용하여 객체의 실제 타입을 확인한 후 캐스팅하는 방법도 있습니다. 이는 클래스 캐스트 예외를 방지하는 좋은 방법입니다:
Object value = 123;
if (value instanceof Integer) {
String strValue = String.valueOf(value);
}
3. MyBatis 설정 확인
MyBatis를 사용 중이라면, 쿼리 실행 후 반환되는 타입을 확인해야 합니다. 예를 들어, insert
쿼리의 반환 타입이 Integer
일 경우, 이를 처리하는 코드가 잘못되었을 수 있습니다. 다음과 같이 수정하세요:
public interface EmpDao {
public Integer AddEmpMember(EmpDto empdto);
}
MyBatis의 insert
문은 성공 시 Integer
값을 반환하므로, 이 반환 타입을 정확히 지정해야 합니다.
4. 클래스 로더 및 직렬화 확인
클래스가 서로 다른 클래스 로더에 의해 로드되었거나, 직렬화와 역직렬화 과정에서 문제가 발생할 수 있습니다. 직렬화된 객체가 동일한 클래스 로더에 의해 로드되고 있는지, 그리고 동일한 클래스가 사용되고 있는지 확인하세요.
[ERROR] java.util.long cannot be cast to class java.lang.integer
[ERROR] java.util.long cannot be cast to class java.lang.integer
배경 내가 사용하는 공공데이터 포털의 api 는 해당 api의 데이터의 총 개수가 몇개인지 totalCount 라는 필드 안에 담아서 넘겨준다. api 호출 후 전부 저장되었는지 확인하기 위해서, 해당 totalCount
velog.io
java.lang.Integer cannot be cast to java.lang.String
오류는 주로 데이터 타입 혼동으로 발생합니다. 이를 해결하려면 올바른 타입 변환을 사용하고, instanceof
연산자를 통해 타입을 확인하며, MyBatis와 같은 프레임워크를 사용할 때는 반환 타입을 정확히 지정해야 합니다. 이러한 방법들을 통해 오류를 해결할 수 있습니다.