handleMethodArgumentNotValid
handleHttpRequestMethodNotSupported
handleMissingPathVariable
handleMissingServletRequestParameter
handleHttpMessageNotReadable
ResponseEntityExceptionHandler에 대하여
에러가 났는데 내가 문젠지 호출자가 문젠지 알 수가 없는 상황이면 결국 물어물어 누가 범인인지 찾아야 하기 때문에 생산성이 떨어진다. 따라서 어떤게 문젠지 상세히 알려주어야 한다.
클라이언트 서버 구조에서 에러 상황은 다양하다. 대표적으로 parameter가 비어있거나, 유효하지 않을 때, 지원하지 않는 http method일 때가 있다.
이러한 상황을 spring webmvc나 서블릿에서 클래스로 미리 정의해놓은게 있다.
그런데 문제가 있는데, 비즈니스 에러일 때는 클래스를 각 상황마다 선언해주어야 한다.
이렇게 되면 클래스 양이 많아짐에 따라 유지보수도 어려워진다.
따라서 이를 통일하기 위해 상속과 확장의 개념을 사용한다.
내가 참고한 사이트는 https://medium.com/@georgeberar.contact/springboot-standardized-api-exception-handling-f31510861350 이다.
먼저 예외가 발생했을 때 어떤 것을 클라이언트에게 보여줄 지 정해야 한다. 이를 위해 ExceptionPolicy 인터페이스를 만들고 코드와 메시지를 전달하도록 한다.
public interface ExceptionPolicy {
String getCode();
String getMessage();
}
여기서 코드란 HttpStatus 상태 코드가 아니라 비즈니스적으로 유의미한 코드이다.