마이바티스(Mybatis)를 사용하다 보면 가끔 만나는 오류 입니다.
오류 메시지는 아래와 같습니다.
Java.lang.NumberFormatException: For input string: "값"
Java.lang.NumberFormatException: For input string: "Y"
...
마이바티스(Mybatis)에서 문자열을 가지고 비교를 하는 데 숫자(Number)와 관련된 오류가 발생 한다는 내용입니다.
해당 원인은 OGNL(Object Graph Navigation Language) 의 문제로 알려져 있습니다.
1개의 데이터가 홑따옴표와 함께 표현되어 있으면 해당 데이터를 char 형태로 인식을 합니다.
아래와 같은 경우를 의미 합니다.
<select id="testQuery">
SELECT * FROM TEST
WHERE
1=1
<if test="TARGET == '값'">
AND TARGET = #{TARGET}
</if>
</select>
위 샘플 코드를 보면 TARGET에 대한 값이 홑따옴표인 것을 볼 수 있습니다.
그런데 해당 데이터가 1개의 문자로 되어 있으면 NumberFormatException 이 발생하게 되는 것 입니다.
* 오류 CASE : 홑따옴표 + 1개의문자
그러므로 이와 같은 오류를 방지하기 위해서는 감싸주는 테그를 홑따옴표로 바꾸고, 내부에 비교하는 값을 쌍따옴표로 바꾸면 됩니다.
<select id="testQuery">
SELECT * FROM TEST
WHERE
1=1
<if test='TARGET == "값"'> <!-- 이렇게 쌍따옴표, 홑따옴표를 바꾸어 줍니다 -->
AND TARGET = #{TARGET}
</if>
</select>
비교하는 문자가 2개이상인 경우에는 홑따옴표로 감싸주어도 사실 문제는 없습니다.
그러나 언제 어디서 1개의 단어를 비교해야 될 지 모르므로 가급적 홑따옴표에 값을 쌍따옴표로 바꾸어 주는게 좀 더 낫지 않을 까 합니다.
이외 가능한 방법 입니다.
1. <if test=”stringValue == "값"”> – 쌍따옴표를 HTML 코드로 변경
2. <if test=”stringValue == ‘값’.toString()”> – toString() 함수를 사용해 String 형으로 변환
궁금한점 또는 틀린부분은 언제든 댓글, 메일로 연락주세요! 👻
반응형
'Spring framework' 카테고리의 다른 글
전자정부프레임워크 4.0.0 사용 후기 (8) | 2022.08.26 |
---|---|
Spring XSS 방지를 위한 lucy 필터(com.navercorp.lucy) (0) | 2021.10.15 |
전자정부(이클립스) 톰캣 10 구동(Eclipse run tomcat 10) (4) | 2021.08.04 |
Spring 자주 사용되는 비지니스 로직, 컨트롤러 파일 업로드(Spring file upload, contoller) (1) | 2021.06.03 |
Spring RSS Feed 기능 만들기(전자정부 RSS Feed) (0) | 2021.05.31 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글