[스프링부트/업무일지 만들기] JPA로 DB에 리스트 넣는 방법- 직렬화, 역직렬화
이번에는 List<String> tag를 어떻게 JPA로 DB에 넣고 불러오는지에 대해 알아보겠습니다. 아마도 검색해보니 두가지 정도 방법이 있는거 같습니다. 저는 리스트 자료형을 스트링으로 바꿔서 저장하고 불러오는 방법에 대해 소개보겠습니다.
전체적은 순서는 컨버터 만들기, 엔티티 클래스에 컨버터 적용하기 이렇게 두단계로 나누어 집니다.
Converter 만들기
위에는 스트링이라고 표현했지만 더 정확한 표현은 Json 문자열로 변환했다라는 것이 더 정확한 표현인거 같습니다. 한줄 한줄씩 설명하면서 각부분이 왜 필요한지에 대해 설명드리겠습니다.
@Converter
이 클래스가 JPA 변환기를 나타내는 애너테이션입니다.
ObjectMapper
변환을 위해 ObjectMapper를 인스턴스화 합니다.
리스트를 문자열로 변환하기
mapper.writeValueAsString(strings); 이 코드를 통해 리스트를 Json 문자열로 직렬화 합니다.
Json 문자열을 리스트로 바꾸기
mapper.readValue(s, List.class) 이코드는 Json 문자열을 List로 역직렬화합니다.
이 기능을 활용하면 다른 API에서 Json 데이터를 받아와 데이터를 객체로 변화하는데도 활용할 수도 있을거 같습니다.
전체코드
@Converter
public class StringListConvert implements AttributeConverter<List<String>, String> {
final ObjectMapper mapper = new ObjectMapper();
@Override
public String convertToDatabaseColumn(List<String> strings) {
try {
return mapper.writeValueAsString(strings);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
@Override
public List<String> convertToEntityAttribute(String s) {
try {
return mapper.readValue(s, List.class);
}catch (JsonProcessingException e){
throw new RuntimeException(e);
}
}
}
엔티티 클래스에 컨버터 입력하기
다음단계를 위에서 만든 컨버터를 엔티티 클래스에 입력을 해주겠습니다.
단순하게 @Convert 애너테이션을 사용하면 끝입니다.
@Convert(converter = StringListConvert.class)
private List<String> tags;
다음에는 ChatGPT가 알려준 스프링 전역 예외 처리에 대해 소개하도록 하겠습니다.
'프로그래밍사업 > 사이드 프로젝트' 카테고리의 다른 글
[SQLAlchemy 2.0, MySQL] Group by로 합계 구하기(2024년 최신) (2) | 2024.06.18 |
---|---|
[스프링부트/업무일지 만들기] ChatGPT가 알려준 스프링 전역 예외 처리 구현 하기 (0) | 2024.06.06 |
[스프링부트/업무일지 만들기] 업무일지 화면을 보여주는 컨트롤러를 만들기-최신 순서로 정렬하기 (2) | 2024.06.04 |
[스프링부트/업무일지 만들기] 업무일지 API 만들기 (1) | 2024.06.03 |
[스프링부트/업무일지 만들기] 업무일지를 저장하고 수정하고 삭제하고 읽어오기 (2) | 2024.06.02 |
댓글