1. 문제
- 에러 발생시 메세지를 custom 하여 body에 담아서 클라이언트에게 전달 하려고 합니다.
2. 원인
- JVM 이 Exception을 처리 하기 전에 catch 해야합니다.
3. 해결방법
- 전역 처리
- 컨트롤 하단에서 처리
- 메소드 단위 처리
4. 코드
- 저는 다음과 장점으로 전역 처리를 합니다.
- 하나의 클래스로 모든 컨트롤러에 대해 전역적으로 예외 처리가 가능함
- 직접 정의한 에러 응답을 일관성있게 클라이언트에게 내려줄 수 있음
- 별도의 try-catch문이 없어 코드의 가독성이 높아짐
- 망나니개발자
@RestControllerAdvice
public class ExceptionHandleController {
...
@ExceptionHandler({ResponseStatusException.class})
public ResponseEntity<ExceptionDto> ExceptionHandler(ResponseStatusException e) {
return exceptionService.exceptionHandling(e);
}
}
@Service
public class ExceptionHandleService {
public ResponseEntity<ExceptionDto> exceptionHandling(ResponseStatusException e) {
ExceptionDto exceptionDto = ExceptionDto.builder()
.code(e.getRawStatusCode())
.message(e.getReason())
.httpStatus(e.getStatus())
.build();
return new ResponseEntity<>(exceptionDto, exceptionDto.getHttpStatus());
}