model에 enum type을 넣고
mybatis에서 아래 테이블의 data를 받아오려고 한다.
enum은 여러 형태를 가질 수 있다.
아래와 같이 그냥 단건의 데이터만 지정하여 만드는 경우가 있을 수 있고
db에 쌓이는 데이터유형이 숫자( 1_VERSION, 2_VERSION )나
특수문자로 시작할 경우 enum을 아래와 같이 인자를 2개씩 갖게 지정될 수 있다.
그럴경우 여러 형태의 enum 데이터를 바인딩 하지 못해
아래와 같은 오류가 발생 할 수 있다.
Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column '' from result set.
Caused by: java.lang.IllegalArgumentException: No enum constant
위소스를 보면 상품정보 rest controller에서 service를 거쳐 mapper에 해당하는 쿼리결과를 lists 객체에
담겨야 하는데 데이터를 못받아와 catch절 NOT_FOUND로 빠져
swagger에서해당 data를 알지 못해 못받아오는 경우도 생긴다.
이럴경우 TypeHandler를 생성하여 해결할 수 있다.
그리고 생성한 type handler 위치의 패키지명을 아래와 같이 지정해준다.
type-handlers-package: com.shlee.toy1.common.handler.type
그리고 api를 조회해보면 아래와 같이 enum으로 정의한 키값으로 나온다.
이제 이 반환된 키 값으로 서비스 로직에서 데이터를 가공해서 반환해주면 된다.
이제 여러개의 enum type에 대응가능한 mybatis type handler에 대해 작성할 수 있게 되었다.
'전체 > Spring Boot' 카테고리의 다른 글
Could not autowire. No beans of type found. error 해결 (1) | 2021.02.14 |
---|---|
spring boot swagger 적용하기 (0) | 2021.02.14 |
Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 해결하기 (6) | 2021.02.14 |
Spring Boot JPA CRUD테스트 프로젝트 만들기 - 6 (0) | 2019.08.09 |
Spring Boot JPA 설정 프로젝트 만들기 - 5 (4) | 2019.07.28 |