Map에서 정수를 꺼낼 때 java.math.BigInteger cannot be cast to java.lang.Integer 오류
반응형

프론트에서 백으로 데이터를 보낼 때 

 

생산성을 이유로든, 너무 일회성이라 DTO를 만들기 애매할 때든, 어떤 이유가 되었던 간에

 

JAVA bean DTO를 만들지 않고

 

Map<String,Object> 맵 형식으로 키, 밸류를 받아 사용할 때가 있다.

 

그런데 Map형식으로 받은 데이터를 키값을 이용해 사용하려고 할 때 

 

정수형 int를 선언해서 쓰려고 하면 에러가 발생한다.

 

 

java.math.BigInteger cannot be cast to java.lang.Integer

 

 

Map에서 정수를 꺼낼 때 BigInteger로 꺼내기 때문인데

 

추측하기로는 map에 들어오는 데이터가 long보다 큰 수일 수도 있으니 제한이 없는 BigInteger로 꺼내는 게 아닐까...추측해본다.

 

이 에러는 스프링에서는 두가지로 해결 할 수 있는데...

 

위에서 썼듯 받을 때 이미 받을 형이 선언되어있는 DTO를 만들어서 받거나

 

Map에서 바로 int로 형변환 하지 않고 String.valueOf를 거쳐서 형변환 하면 정수형으로 사용할 수 있다.

 

int i = Integer.parseInt(String.valueOf(map.get("키 값")))

 

 

 

반응형