지금까지는 잘못된 회원을 조회했을 때 500상태 코드로 에러가 보여졌습니다.
500번대 에러가 사용자에게 바로 보이는 것은 좋지 않습니다.
잘못된 회원을 조회한 것이라면 400번 에러가 보여야합니다.
응답코드에 대해 자세히 알고 싶다면 참고해주세요.
우리는 500번 에러를 400번으로 고치겠습니다.
에러 클래스를 만들겠습니다.
package study.rest.webservices.restfulwebservices.user;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(code = HttpStatus.NOT_FOUND)
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
findOne메소드를 수정합니다.//수정 전
public User findOne(int id) {
Predicate<? super User> predicate = user -> user.getId().equals(id);
return users.stream().filter(predicate).findFirst().get();
}
//수정 후
public User findOne(int id) {
Predicate<? super User> predicate = user -> user.getId().equals(id);
return users.stream().filter(predicate).findFirst().orElse(null);
}
이번에는 UserResource를 수정하겠습니다.
retrieveUser() 를 수정합니다. //수정 전
@GetMapping("/users/{id}")
public User retrieveUser(@PathVariable int id) {
return service.findOne(id);
}
//수정 후
@GetMapping("/users/{id}")
public User retrieveUser(@PathVariable int id) {
User user = service.findOne(id);
if (user == null) {
throw new UserNotFoundException("id:" + id);
}
return user;
}
수정 후에는 데이터가 없다면 null이 반환됩니다. 이때, 사용자가 만든 예외를 사용해서 처리를 합니다.
사용자가 만든 예외클래스에서 상태코드를 404로 부여했기 때문에
@ResponseStatus(code = HttpStatus.NOT_FOUND) 500번 대신 400번대 예외가 발생합니다.
