반응형
레포지토리에서 특정 id로 엔티티를 가져올 때, Optional로 반환을 하기 때문에 서비스단에서 예외처리를 그동안 해주었다.
근데 과제 중에 튜터님이 쓰윽 지나가시다가 레포지토리 단에서 예외를 발생토록 하는 방식도 있다고 알려주고 가셨다.
기존에 쓰던 서비스단에서 예외처리는 다음과 같다.
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class TodoCardService {
private final TodoCardRepository todoCardRepository;
/**
* 할일카드 단건 조회
*/
public TodoCardDetailResponseDto getTodoCard(Long todoCardId) {
TodoCard todoCard = getTodoCardById(todoCardId);
return new TodoCardDetailResponseDto(todoCard);
}
private TodoCard getTodoCardById(Long todoCardId) {
return todoCardRepository.findById(todoCardId)
.orElseThrow(() -> new IllegalArgumentException("잘못된 아이디"));
}
}
이렇게 서비스에서 따로 예외처리 후 반환해 사용하도록 했다.
이거를 레포지토리 인터페이스에서 default 문법을 이용해서 처리한 것은 다음과 같다.
public interface TodoCardRepository extends JpaRepository<TodoCard, Long>, TodoCardRepositoryCustom {
default TodoCard getTodoCardById(Long todoCardId) {
return findById(todoCardId).orElseThrow(() -> new IllegalArgumentException("잘못된 아이디"));
}
}
이렇게 레포지토리단에서 처리를 하도록 한 후,
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class TodoCardService {
private final TodoCardRepository todoCardRepository;
/**
* 할일카드 단건 조회
*/
public TodoCardDetailResponseDto getTodoCard(Long todoCardId) {
TodoCard todoCard = todoCardRepository.getTodoCardById(todoCardId);
return new TodoCardDetailResponseDto(todoCard);
}
}
반응형
'TIL ✍️' 카테고리의 다른 글
23년 12월 22일(금요일) - 58번째 TIL (1) | 2023.12.22 |
---|---|
23년 12월 21일(목요일) - 57번째 TIL (0) | 2023.12.21 |
23년 12월 19일(화요일) - 55번째 TIL : 영속성 전이 및 고아 객체 (0) | 2023.12.19 |
23년 12월 18일(월요일) - 54번째 TIL : QueryDSL (0) | 2023.12.18 |
23년 12월 15일(금요일) - 53번째 TIL (0) | 2023.12.15 |