삭제를 구현해보겠다.
아래처럼 간단하게(?) 코드를 짜보았다. (이렇게 위험하게 짜면 안된다는 거 알지만 ㅎㅎ)
@DeleteMapping("/dummy/user/{id}")
public String deleteUser(@PathVariable int id) {
userRepository.deleteById(id);
return "삭제되었습니다. id : " + id;
}
그런데 이 코드의 문제는 만약 id가 User 객체에 없다면 에러가 발생한다.
현재는 id가 1, 2, 3인 User만 DB에 있다.
없는 id인 5를 넘겼더니 예상했듯이 에러가 발생한다.
@DeleteMapping("/dummy/user/{id}")
public String deleteUser(@PathVariable int id) {
try {
userRepository.deleteById(id);
} catch (IllegalArgumentException e) {
return "삭제에 실패하였습니다. 해당 id는 DB에 없습니다.";
}
return "삭제되었습니다. id : " + id;
}
try-catch 문을 사용하여 IllegalArgumentException 으로 에러 처리를 해보았다.
여전히 위와 똑같은 에러가 발생한다.
뭐지 ❓❓❓❓❓❓❓
아 EmptyResultDataAccessException 을 사용해야 하넹
@DeleteMapping("/dummy/user/{id}")
public String deleteUser(@PathVariable int id) {
try {
userRepository.deleteById(id);
} catch (EmptyResultDataAccessException e) {
return "삭제에 실패하였습니다. 해당 id는 DB에 없습니다.";
}
return "삭제되었습니다. id : " + id;
}
된다!!
id가 1번인 User 삭제 완료~!