인프런 커뮤니티 질문&답변

유승현님의 프로필 이미지

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

정리

Converter 사용 관련 질문

작성

·

397

0

JPA에서 entity 필드에 String이 아닌 Enum 타입을 사용한다고 하면,

1. Controller에서 Enum Type으로 변환해서 service(비즈니스 로직)를 사용

2. Entity에서 @Converter 애노테이션을 통해 db에 저장될때 Enum타입으로 변환해서 저장되도록 설정

이렇게 2가지 방식으로 사용할 수 있을 것 같은데요
둘 다 모두 Converter를 정의해서 사용은 하고, 어디에서 이를 적용하느냐의 문제인 것 같은데 

어떻게 사용하는게 더 좋은 방식인지 궁금합니다.

답변 4

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 승현님

클라이언트가 소문자로 입력한다면 컨트롤러에서 소문자로 받는다는 뜻이군요?

그렇다면 컨트롤러에서 소문자를 대문자로 변경해서 ENUM으로 바꾸는 작업이 필요할 듯 합니다.

감사합니다.

0

유승현님의 프로필 이미지
유승현
질문자

Enum을 BOOKS, CLOTHES, DIGITAL 이렇게 정의한 것을 lowercase로 하여 테스트 해봣는데, 적용이 안되는데

client가 소문자로 입력을 넣었을때도 정상 처리해주고 싶어 질문 드렸었습니다.


0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 유승현님

JPA가 기본적으로 ENUM 타입을 자동으로 데이터베이스에 매핑해줍니다.

JPA 기본편 강의 - 필드와 컬럼 매핑을 참고해주세요.

감사합니다.

0

유승현님의 프로필 이미지
유승현
질문자

@Data
static class Form{

@NumberFormat(pattern = "###,###")
private Integer number;

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime localDateTime;
}

Controller에서는 이런 변환 과정 로직을 넣어주지 않고,

위에서 사용하신 것처럼 Entity에서 적용하는 방식이 더 맞는 방식인 것 같긴 한데,

이렇게 사용하면

내부 로직에서 Entity에 값을 넣어줄 때, enum값을 사용하지 못하고 String으로 직접 넣어줘야 하는것 같아서
맞지 않는 방식인것 같기도합니다,