기본 콘텐츠로 건너뛰기

라벨이 MyBatis인 게시물 표시

마이바티스 String == 처리 오류 NumberformatException

마이바티스 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 == &quot;Y&quot;”> – 쌍따옴표를 HTML 코드로 변경 3. <if test=”stringValue ==