Backend/Spring

Spring Mybatis에서 CLOB 데이터 처리

둉이 2021. 8. 18. 20:33

Tibero DB에서 SELECT문으로 데이터를 불러오는 기능을 만들고 있었는데 갑자기 보기 드문 오류가 발생했다.

 

 

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.tmax.tibero.jdbc.TbClobReader and no properties discovered to create BeanSerializer

 

가져온 map을 출력해 봤는데, content 요소의 값이 문자열이 아닌 Clob 형태여서 json 형식으로 변환할 수 없다는 것 같다.

 

해결 방법으로는 mapper에서 resultMap을 만들어 주면 된다.

 

예를 들어, 쿼리가 다음과 같고 content 컬럼의 datatype이 clob이면 다음과 같이 resultMap을 만들어서 해당 select문의 resultMap 속성에 추가하면 된다.

<!-- 1. resultMap을 만들어 준다. -->
<resultMap type="EgovMap" id="minwonTableList">
  <result property="sno" column="sno" />
  <result property="title" column="title" />
  <result property="content" column="content" jdbcType="CLOB" javaType="java.lang.String" />
  <result property="dept" column="dept" />
  <result property="status" column="stat" />
  <result property="pname" column="pname" />
  <result property="rdate" column="rdate" />
</resultMap>

<!-- 2. 쿼리에 해당 resultMap의 ID를 속성에 추가한다. -->
<select id="selectMinwonTableList" parameterType="EgovMap" resultType="EgovMap" resultMap="minwonTableList">
  SELECT CNSL_QNA_NO SNO, MW_CNSL_SJ TITLE, SUBSTR(MW_APPL_CN, 0, 500) CONTENT, CNSL_DEP_NM DEPT, 	
  DEAL_STATE_NM STATUS, ANS_USR_NM PNAME, TO_DATE(REG_DT, 'YYYY-MM-DD HH24:MI:SS') RDATE
  FROM ...
</select>