본문 바로가기
[ Error ]/JAVA

[ Java ] java.lang.NumberFormatException: For input string: ""

by 환이s 2023. 4. 29.


장바구니 페이지 기능에 수정/삭제 기능을 추가하려고 카트 값을 Controller에 요청을 보낼 때 같이 보냈는데..   java.lang.NumberFormatException: For input string: ""  에러가 발생했다.

 

NumberFormatException 에러는 개발 중 종종 발생하는 오류중 하나입니다.

단어를 풀어서 이야기하면 숫자 형식 오류라는 의미가 됩니다.

 

이런 경우는 Integer 타입으로 받으려고 할 때 주로 에러가 발생하는데,

저는 거의 view단 페이지에서 null값으로 보내줘서 주로 발생했습니다.

 

그로 인해 코드 작업할 때마다 log 찍어보는 게 버릇이 생겼는데,

오늘은 NumberFormatException 에서  For input string: "" 에 대해서 

알아보겠습니다.

 

For input string: "" 오류는 주고받는 값 중 Null값이 존재하면 알려주는 메시지입니다.

잠깐 코드를 보시면

 

기존 java 식에서 JSTL 수직으로 바꿔주다, 값을 돌려보내니까 이런 에러가 났습니다.

콘솔 창에서 알려주는 에러 위치 코드 위치를 찾아가 보니

 

 

역시나..^^ Null값으로 가져오고 있습니다.

그래서 기능 추가 하면서  상품 코드 번호를 확인하기 위해 sysout을 찍어봤는데,

콘솔 창에 안 나오는 이유가 있었네요..^^

 

그렇다면 넘겨주는 과정에서 문제가 있다고 판단이 됩니다.

다시 view 단 코드를 보면 값을 넘겨주는 과정에서 hidden 값으로 ${row.cart.id} 보내주는데,

log를 찍어보니 null값이 나왔습니다.

 

값이 없다는 소리인데, 여기서 실수한 부분은 값을 보낼 때는 DTO 타입으로 getCart_id 값을 보내줘야

하는데, 위 코드에서는 row, map.list 타입으로 받아왔기 때문입니다.

 

그럼 DTO 타입으로 수정하면 된다??

수정하면 할 수는 있습니다.

하지만... 코드를 다시 다 엎어야 한다는 점..^^

 

해결법은 간단합니다.

위 코드처럼 ${row.cart.id} 값을 가져왔다면 

자바 스크립트에서 value 값으로 지정해 줍니다.

 

그리고 해당 기능 요청을 보낼 때 

 

 

같이 보내주시면 됩니다.

수정해서 실행해 본 결과 정상적으로 장바구니에 있는 상품이 삭제됩니다.

 

추가로 저는 NumberFormatException 에러가 주로

<c:forEach> 태그를 사용했을 때 실수로 종종 발생합니다.

자주 겪다 보니 이젠... 익숙하네요..^^


마치며

 

오늘은 java.lang.NumberFormatException: For input string: ""  에러에 대해서 포스팅해 보았습니다.

다음 포스팅에서 뵙겠습니다.

728x90