[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가 저장된다
그래서 위와 같은 상황을 피하기 위해서는 다음과 같은 해결책이 존재합니다.
- <if test='stringValue == "Y"'> – 쌍따옴표와 홑따옴표의 위치를 변경 (equal 함수 추천!)
- <if test="stringValue == "Y""> – 쌍따옴표를 HTML 코드로 변경
- <if test="stringValue == 'Y'.toString()"> – toString() 함수를 사용해 String 형으로 변환
- java 함수 생성 및 호출 (equals 함수를 새로 생성하고 가져다 쓰는 방법이며, 따옴표에 구애받지 않을 수 있음!)
마이바이트 자바함수 생성 및 호출 방법은 아래의 링크에서 확인하세요!!!
2020/03/27 - [코딩 재료 다듬기/Spring] - :: [Mybatis] Java Function 불러오기
반응형
'Spring > Mybatis' 카테고리의 다른 글
[MyBatis] Could not resolve type alias '' (0) | 2023.04.06 |
---|---|
[Mybatis] LOB Type 데이터 처리하기 (0) | 2020.04.02 |
[Mybatis] Log4j 로그찍기 (0) | 2020.03.31 |
[Mybatis] Java Function 불러오기 (0) | 2020.03.27 |
[Mybatis] 기본 및 유용한 문법 모음 (0) | 2020.03.27 |
블로그의 정보
배부른코딩로그
배부른코딩로그