8강(enum class 활용방법 )
parameter, domain, 클래스 내부 변수(종류, 분류 코드) 등에 대해서 enum으로 처리하기
- Board 테이블에 BOARD_TYPE VAR_CHAR(10) 컬럼 추가, Board.xml 쿼리 수정
Alter 쿼리를 이용해 컬럼 추가
Board.xml 쿼리 수정
B.BOARD_TYPE 추가
- BaseCodeLabelEnum, BoardType enum class 생성
코드와 라벨을 리턴 하는 메소드 생성
BoardType 클래스 생성
아까 만든 BaseCodeLabelEnum을 implements 해준다.
거기에 NOTICE, FAQ, INQUIRY enum 세 개 선언해줌. 그리고 내부 변수 code, label 만들기.
기본 생성자에 String lable을 해주면 enum을 생성하면서 원하는 값을 대입할 수 있다.
코드에는 기본적으로 enum에서 제공하는 name() 메소드를 호출하면 notice 값이 code에 대입된다.
코드와 라벨 오버라이드 해주고 내부 변수 지정.
- Board BoardType boardType 변수 추가
- BaseCodeLabelEnumJsonSerializer 클래스 추가
BaseCodeLabelEnumJsonSerializer 클래스를 만들고 상속은 JsonSerializer 그리고 <BaseCodeLabelEnum> 만들어 놓은 인터페이스 클래스를 지정해준다.
맵을 하나 선언하고 맵에 코드와 라벨을 담아준다. 그리고 jsonGenerator에 writeObject메소드를 이용해서 만든 맵을 던져준다.
- WebConfiguration ObjectMapper, MappingJackson2JsonView Bean 등록
jsonView.setObjectMapper에 우리가 만든 메소드를 이렇게 지정을 해줌.
실행했더니 오류가 남. DB에 설정된 크기와 맞지 않기 때문에 생긴 오류
요정도로 설정해주고 다시 돌려보자
값이 잘 나왔다. 아니 별거에 삽질을 너무 오래했다
이걸 안 고르고 계속 실행하니 오류가 생긴 것이었다. BoardType은 null일 수 없다.
목록 조회에도 에러가 뜬다… java.lang.IllegalArgumentException: No enum constant kr.co.loafingcat.mvc.domain.BoardType.
enum이 없다 그런다. 해결책을 찾아보자
며칠동안 답이 안 나온다 그냥 싹 삭제하고 다시 해보자.
싸악 지우니까 일단 오류는 사라졌다. 다시 강좌를 따라 해보자.
BOARD_TYPE VAECHAR(10) 컬럼 추가하고 Board.xml을 수정하자.(완)
BaseCodeLabelEnum, BoardType enum class 생성(완)
BoardParameter BoardType boardtype 변수 추가(완)
Board BoardType boardType 변수 추가(완)
BaseCodeLabelEnumJsonSerializer 클래스 추가(완)
WebConfiguration ObjectMapper, MappingJackson2JsonView Bean 등록(완)
Swagger에서 save 호출(완)
Swagger에서 list 조회 결과 확인(미완)
왜 다 되는데 리스트 조회만 java.lang.IllegalArgumentException: No enum constant kr.co.loafingcat.mvc.domain.BoardType.
이 오류가 뜰까…
이전 강의에서 10000건 이상의 saveList1,2 때문에 DB에 너무 많은 데이터가 쌓여 있었다 4만건 정도. 더미 데이터로 가득한 테이블을 싹 비우고 다시 실행해보니 성공했다…
3일이나 걸렸지만 알아내서 너무 기쁘다. 원인은 enum과 DB가 일치하지 않았기 때문이라고 추측한다. enum과 일치할 수 없는(규격이 맞지 않는) 더미 데이터들이 있기 때문에 list를 불러올 수 없었던 게 아닐까?
성공이다!!!