id로 회원삭제하기

@DeleteMapping("/dummy/user/{id}")
public String delete(@PathVariable int id) {
    try {
        userRepository.deleteById(id);
    } catch (IllegalArgumentException e) {
        return "삭제 실패 되었습니다. 해당 id는 DB에 없습니다.";
    }

    return "삭제되었습니다." + id;
}

try catch 문을 쓴 이유는 없는 id를 삭제했을때 위험이 있어서 

 

 

에러 org.springframework.dao.EmptyResultDataAccessException 

 

 

IllegalArgumentException 말고 EmptyResultDataAccessException 을 예외로 넣어준다.

@DeleteMapping("/dummy/user/{id}")
public String delete(@PathVariable int id) {
    try {
        userRepository.deleteById(id);
    } catch (EmptyResultDataAccessException e) {
        return "삭제 실패 되었습니다. 해당 id는 DB에 없습니다.";
    }

    return "삭제되었습니다." + id;
}

 

없는 5번 id를 넣었을때 EmptyResultDataAccessException 예외가 나온다

 

 

최고 부모인 Exception 을 써도 된다. (모든 예외는 Exception 자식이라서 다 해당 됨.)

 catch (Exception e) 

 

모든 exception은 Exception의 자식이기 때문에 모든 예외처리가 된다.

그치만 정확하게 예외처리하기 위해선 (IllegalArgumentException , EmptyResultDataAccessException ) 으로 한다.

 

 

 

 

 

 

1번 id 삭제 성공 시  

DB 삭제완료

 

 


에러페이지 설정하기

에러 페이지

 

 

1. 패키지 handler 생성

 

 

 

 

2. GlobalExceptionHandler 클래스 생성

 

 

 

 

3. exception 이 발생할때 이 함수로 처리한다. 

 

@ControllerAdvice
@RestController
public class GlobalExceptionHandler {

@ExceptionHandler(value = IllegalArgumentException.class)
public String handleArgumentException(IllegalArgumentException e) {
    return "<h1>" + e.getMessage() + "<h1>";
    }
}

 

어느곳에서든 예외가 발생하면 모든 exception은 이 함수로 오기 위해서 @ControllerAdvicer 을 쓴다.

 

예외가 들어왔을때 어떤 예외를 처리할것이냐는 

@ExceptionHandler(value = IllegalArgumentException.class) 어노테이션을 써서

IllegalArgumentException 에러를 e에게 전달하고 e.getMessage() 을 리턴한다.

 

 

 

@ExceptionHandler(value = Exception.class) 으로 하면 모든 Exception를 처리 (최고 부모)

@ExceptionHandler(value = IllegalArgumentException.class) 으로 하면 IllegalArgumentException 예외만 처리

 

 

반응형
LIST

+ Recent posts