장바구니 페이지 기능에 수정/삭제 기능을 추가하려고 카트 값을 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: "" 에러에 대해서 포스팅해 보았습니다.
다음 포스팅에서 뵙겠습니다.
'[ Error ] > JAVA' 카테고리의 다른 글
[ Java ] OutOfMemoryError(With 힙덤프) 에러 분석해보기 (3) | 2024.05.29 |
---|---|
[ Java ] IndexOutOfBoundsException 에러 해결 (2) | 2024.05.09 |
[ Java ] UnsatisfiedDependencyException / NoSuchBeanDefinitionException (0) | 2023.06.07 |
[ Java ] javax.el.PropertyNotFoundException (0) | 2023.04.23 |