728x90
반응형
깃허브
https://github.com/gxnie/Schedules_Develop
GitHub - gxnie/Schedules_Develop
Contribute to gxnie/Schedules_Develop development by creating an account on GitHub.
github.com
문제 개요 : Repository 예외처리 진행 중 오류(findByIdOrElseThrow)
- 문제 : findByIdOrElseThrow 메서드가 ScheduleRepository에 없어서 발생한 오류
- 증상: findByIdOrElseThrow 메서드 호출 시 MethodNotFoundException 오류 발생
문제 발생
- findByIdOrElseThrow 메서드가 ScheduleRepository에 정의되지 않아, 해당 메서드를 호출하는 코드에서 오류 발생(단어가 빨간색으로 변경)
- 오류를 해결한 후, User Repository에 삭제 기능을 구현할 때 findByIdOrElseThrow 메서드가 없어서 동일한 오류가 또 발생
해결 방법
첫 번째 문제 (ScheduleRepository에서 오류 발생):
- 원인: ScheduleRepository에 findByIdOrElseThrow 메서드가 정의되지 않음(원래 있던 메소드가 아님, 커스텀해야함)
메서드가 정의되지 않아서 ScheduleRepository에서 삭제 기능을 구현할 때, 오류가 발생 - 해결 방법: ScheduleRepository에 findByIdOrElseThrow 메서드를 추가하여 문제를 해결
package com.example.schedules_develop.Repository;
import com.example.schedules_develop.entity.Schedule;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;
public interface ScheduleRepository extends JpaRepository<Schedule, Long> {
default Schedule findByIdOrElseThrow(Long id){
return findById(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Does not exist id = " + id));
}
}
두 번째 문제 (UserRepository에서 오류 발생):
- 원인: UserRepository에서 삭제 기능을 구현할 때, findByIdOrElseThrow 메서드가 정의되지 않아서 오류가 발생
- 해결 방법: UserRepository에도 동일한 findByIdOrElseThrow 메서드를 추가(ScheduleRepository에서 작성한 findByIdOrElseThrow 메서드를 UserRepository로 복사하여 붙여넣기)하여 오류 해결
package com.example.schedules_develop.Repository;
import com.example.schedules_develop.entity.Schedule;
import com.example.schedules_develop.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;
import java.util.Optional;
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findUserByUserName(String username);
default User findUserByUserNameOrElseThrow(String username){
return findUserByUserName(username).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Does not exist username = " + username));
}
default User findByIdOrElseThrow(Long id){
return findById(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND, "Does not exist id = " + id));
}
}
4. 검증 및 확인
- ScheduleRepository에서 findByIdOrElseThrow 메서드를 추가한 후, Schedule Repository에서 발생한 오류가 해결되었는지 확인
- UserRepository에 동일한 메서드를 추가한 후, 삭제 기능을 Postman에서 실행해 확인하기
728x90
반응형
'❄️ 내일배움캠프 7기' 카테고리의 다른 글
[Trouble Shooting] 플러스주차 개인과제 (0) | 2024.12.18 |
---|---|
[Trouble Shooting] 은행 환전 개인과제 (0) | 2024.11.29 |
[Trouble Shooting] 일정 관리 앱 만들기 (1) | 2024.11.08 |
[내배캠/Spring] 1주차(용어 모음집) (0) | 2024.10.31 |
[JAVA] 숫자 야구 게임 개인과제 회고 (0) | 2024.10.28 |