현재 존재하는 user가 3명인데, /users/5 URL
과 같이, 존재하지 않는 user를 요청하면,
다음과 같이, Optional.get()메서드 부분에서 에러가 난다는 메세지와 함께 Whitelabel Error Page가 나타난다.
하지만, Whitelabel Error Page는 보기에 썩 좋지가 않다.
이번 포스팅에서는 위 예외처리 페이지 부분을 개선해보고자 한다!
하지만, 해당 get()메서드의 정의부분을 보니, 값이 존재하면 리턴해주지만, 값이 존재하지 않는다면 에러를 발생시켜, throws NoSuchElementException
을 발생시키는 것을 확인할 수 있었다!
이에, .get()메서드 부분을 .orElse(null)
코드로 수정했다.
해당 orElse 함수는 값이 있다면 리턴값은 get메서드와 동일하지만, 값이 존재하지 않는다면 내가 정의한 매개변수의 값을 리턴해줘, 에러를 발생시키지 않는다는 점에서 달랐다!
앞선 실행결과와 달리, 에러 메세지가 사라졌지만, 여전히 빈 화면이다. 고쳐보자!!
맨 처음 에러가 났던 상황은, 존재하지 않는 user에 대한 접근을 했을 때(가령, /users/5
) 발생했다.
그렇다면, 존재하지 않는 유저를 따로 처리해주는 코드를 UserDaoService의 findOne메서드에 추가해줘야 한다.
/users/{id} URL을 처리해주는 함수인 retriveOneUser 메서드
를 살펴보면, 해당 null 값 리턴 처리를 해주지 않는 것을 확인할 수 있었다.
findOne()메서드가 null값을 리턴해주는 경우를 처리해주자.
앞서 발생시킬 예외를 처리해줄 클래스 정의
UserNotFoundException 에러가 나타났다.
근데, 여기서 주목할 점은, Resource Not Found 에러는 404 상태를 리턴해야 하는데, 500을 리턴하는 것을 확인할 수 있었다.
404 http response status를 리턴하게끔 하자!
@ResponseStatus
어노테이션 추가
그렇다면 실행결과, status 404가 리턴되고, UserNotFoundException 예외 클래스가 발생된 것을 확인할 수 있다.
참고 및 출처
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/