Daily Notebook

[Mybatis] OGNL(Object Graph Navigation Language) Issue

by 배부른코딩로그

마이바티스를 사용하다보면, OGNL(Object Graph Navigation Language) 문제를 겪게 될 수 있습니다.

 

뭐, 운이 좋다면 겪어보지 못했을 수 있습니다...!!

 

다음 예제를 살펴봅시다.

<!-- ex 1) -->
<if test="stringValue == 'Y'"></if>
<!-- ex 2) -->
<if test="condition.equals('Y')"></if>

 

위와 같이 글자 하나를 조건문 안에서 비교할 때, 

 

java.lang.NumberFormatException: For input string: "Y" 또는 인식 불가, 오작동이 발생할 수 있습니다.

 

이 현상은 마이바티스 문제가 아닌 OGNL(Object Graph Navigation Language)의 문제입니다.

 

OGNL 인터프리터에서는 위 구문의 'Y' 를 char 형으로 인식하고, 'YY' 나 "Y" 는 String으로 인식합니다.

 

해당 문제는 아래와 같이 형변환이 가능하기 때문에 발생합니다!

 

char y = 'Y';
int code = (int) y; // code에는 Y의 코드값인 89가 저장된다

 

그래서 위와 같은 상황을 피하기 위해서는 다음과 같은 해결책이 존재합니다.

 

  1. <if test='stringValue == "Y"'> – 쌍따옴표와 홑따옴표의 위치를 변경 (equal 함수 추천!)

  2. <if test="stringValue == &quot;Y&quot;"> – 쌍따옴표를 HTML 코드 변경

  3. <if test="stringValue == 'Y'.toString()"> – toString() 함수를 사용해 String 형으로 변환

  4. java 함수 생성 및 호출 (equals 함수를 새로 생성하고 가져다 쓰는 방법이며, 따옴표에 구애받지 않을 수 있음!)

 

마이바이트 자바함수 생성 및 호출 방법은 아래의 링크에서 확인하세요!!!

 

2020/03/27 - [코딩 재료 다듬기/Spring] - :: [Mybatis] Java Function 불러오기

 

 

 

 

 

출처: Mybatis OGNL Issue, Cofs, 2016.1.5

반응형

블로그의 정보

배부른코딩로그

배부른코딩로그

활동하기