공부/Spring
옵셔널(optional)과 람다(lambda)를 이용하여 JpaRepository에서 예외 처리하기
뮻
2020. 11. 17. 23:35
spring에서 JpaRepository의 findById를 이용하면 Optional<T> 타입으로 반환이 된다.
처음에는 불편하기만 하였으나 이제 많이 편해져서 혹시라도 아직 불편하게 사용하는 사람들을 위해서 그 방법을 공유한다.
아래 4가지의 코드는 같은 로직을 가독성이 좋게 코드를 조금씩 수정한 것이다.
가나다
많이 이상하고 불편했던 경우
Optional<User> optinalUser = userRepository.findById(id);
// check for null
if(optinalUser.isPresent()) {
User user = optinalUser.get();
} else {
throw new ResourceNotFoundException();
}
옵셔널 타입이 아닌 일반 객체로 받았을 경우
User user = userRepository.findByUsername(username); // 반환값이 User 타입인 메서드
// check for null
if(user == null) {
throw new ResourceNotFoundException();
} else {
User user = optinalUser.get();
}
null 값 체크를 하면서 옵셔널을 사용하여 가독성 좋이 좋아보이는(?) 코드를 만들어 보았다.
User user = userRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException());
람다식의 생성자 참조를 사용하여 조금 더 간단하게 만들었다.
User user = userRepository.findById(userPrincipal.getId())
.orElseThrow(ResourceNotFoundException::new);
자바 옵셔널과 람다식 메서드/생성자 참조에 관한 글
자바 옵셔널 : jdm.kr/blog/234
메서드/생성자 참조 : tourspace.tistory.com/7
반응형