마이바티스 NumberformatException
마이바티스로 String값을 확인해서 if나 when문을 쓸때 에러가 날때가 있다.
<when test="displayFlag == 'Y'">
AND DISPLAY_CODE IS NULL
</when>
이렇게 작은 따옴표와 큰따옴표를 바꾸면 잘 작동한다.
<when test='displayFlag == "Y"'> AND DISPLAY_CODE IS NULL </when>
더 알아보니
출처 : https://t-ara72.blogspot.com/2013/10/mybatis-numberformatexception.html?showComment=1545889276428#c654979576124699365
분명 문자열 비교 구문인데 NumberFormatException이 발생하는 상황이다.
결론적으로 위 현상은 myBatis 문제는 아니고 OGNL(Object Graph Navigation Language) 의 문제이다.
OGNL 인터프리터에서는 위 구문의 ‘Y’를 char 형으로 인식하고, ‘YY’나 “Y”는 String으로 인식한다. (따옴표를 잘보자)
그래서 <if test=”stringValue == ‘Y’”> 이와 같은 구문을 비교할 때 NumberFormat으로 비교를 시도하여 Exception이 발생한다.
이유는 java의 char형은 실제로 문자의 코드값을 저장하기 때문이다. 그래서 아래와 같은 형변환이 가능하다.
해결책은 3가지가 있다.
1. <if test=’stringValue == “Y”‘> – 쌍따옴표와 홑따옴표의 위치를 변경
2. <if test=”stringValue == "Y"”> – 쌍따옴표를 HTML 코드로 변경
3. <if test=”stringValue == ‘Y’.toString()”> – toString() 함수를 사용해 String 형으로 변환
댓글
댓글 쓰기