
RuntimeException 계승하는 BusinessLogicException는 서비스계층에서 throw되고 있다

handleBusinessLogicException 메서드는 thorw 된 BusinessLogicException를 받아 처리하는 ExceptionHandler이다
ResponseEntity는 ErrorResponse.of 메서드를 통해 처리된 ErrorResponse와 httpStatus을 받아 JSON값을 리턴할 것이다

ExceptionCode은 열거형으로 status와 message 값을 가지고 있으며
@getter를 통해 호출된다
추후 값 추가를 생각해 status에 따라 httpStatus값이 변경될 수 있도록 switch문을 사용해 보았다
지원되지 않는 HTTP 요청을 보낼시 발생되는

HttpRequestMethodNotSupportedException를 handleHttpRequestMethodNotSupportedException 메서드가 받아 처리할 것이다
단, httpStatus: 405 상태 값에 맞춰 body 내 출력되는 status, message를 변경해야 했다.
이를 위해 받은 httpRequestMethodNotSupportedException를 사용하지 않고 원하는 httpStatus 객체를 새로 만들어 보냈다
최종적으로 ResponseEntity가 아닌 ErrorResponse.of를 통해 처리된 ErrorResponse 자체를 리턴해야 했기에 @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED) 애너테이션을 설정하였다

HttpStatus메서드 value(), getReasonPhrase()를 통해 status, message를 가져온다

서비스계층에서 의도적으로 null값을 발생시키고 있다

handleNullPointerException는 NullPointerException를 처리한다
이번에는 HttpServletResponse을 같이 넘겨HttpStatus.INTERNAL_SERVER_ERROR.value()를 재 설정하고
message값을 String으로 직접 넣어주었다
👿👿👿
내가 엄청 해멘 부분이 있는데
어떻게든 httpRequestMethodNotSupportedException 객체만으로 body에 출력되는
상태 코드와 메세지를 호출하고 싶어서, 별짓을 다 했다.
오버라이딩까지 생각해 봤지만 깊게 내려갈 수록 미지의 영역을 만나게 되어 포기했다
httpRequestMethodNotSupportedException 발생시 HttpServletResponse을 함께 받아
getstatus() 사용하면 될 거라 생각했다. 결과로 405가 아닌 그냥 200이 떴다;
Exception객체를 받을 때 HttpServletResponse(405)을 받는다고 해서
해당 Exception관련 HttpServletResponse 값을 받는게 아니라
그냥 기본 값 HttpServletResponse(200)을 받는 것이어서 추가적인 설정이 필요했다.
참고
`"METHOD_NOT_ALLOWED"는 HttpStatus` 코드 값이고
`"Request method 'PATCH' not supported"`는 상태 코드 설명값이다
