snowyoung20 / spring-post

0 stars 0 forks source link

GlobalExceptionHandler 처리 #3

Open snowyoung20 opened 1 year ago

snowyoung20 commented 1 year ago

image

image

image

기존에 로그인 requestDto에서 디폴트 메시지를 넣었고, 오류가 생기면 IllegalArgumentException를 던지도록 되어있었습니다. 그런데 로그인 양식 오류 테스트를 해보면 GlobalExceptionHandler에서 IllegalArgumentException는 인식하지 못하고 MethodArgumentNotValidException으로 처리가 됩니다.
Q1) 핸들러가 IllegalArgumentException를 인식하지 못하는 이유가 있나요? 실제 발생되는 오류가 MethodArgumentNotValidException이기 때문인가요?

Q2) RestApiException restApiException = new RestApiException(e.getMessage(), HttpStatus.BAD_REQUEST.value()); 위 상태에서 포스트맨으로 확인하면 errorMessage가 너무 길게 나오는데, 만약 dto를 수정하지 않는다면 e.getMessage()에서 dto에 걸었던 default message만 출력되게 할 수 있나요?



최신 버전에는 dto를 수정하고 IllegalArgumentException으로 처리했는데, 왜 작동되지 않았는지 궁금해 질문 남겨봅니다!!

iamzin commented 1 year ago

이전에 어떻게 구현하셨는지는 모르겠으나, 사용하신 @Pattern이 던지는 에러의 종류가 무엇인지 찾아보셔야 할 것 같아요. 😃 또한 @Pattern의 message 부분이 에러 발생 시 반환할 메시지인데요. Handler를 통해 가공하여 다시 던졌기 때문에 Handler에 넘어온 Exception에서 해당 message를 추출하여 활용해주셔야 합니다. 자세한 내용은 구글링을 통해 좀 더 탐색해보시기 바랍니다!