728x90
글로벌 예외 처리를 해보니
- 오류별로 묶어서가 아닌 내 마음 대로 status를 다르게 하고 싶음
- 넘겨줄 컬럼을 내가 지정하고 싶음
이를 해결하기 위해 예외를 내가 커스텀하여 글로벌로 예외처리를 해보았다.
RestApiExceptionHandler
- 글로벌 예외 처리에서 커스텀 한 예외 처리를 어떻게 하는지
- IllegalArgumentException으로 통째로 처리하면 HttpStatus를 한 상태만 보내주게 됨
- 이것을 Enum으로 상태, 메세지를 정의하고 가져오고 싶어서 Exception을 커스텀 하게 됨
@ExceptionHandler(value = { CustomException.class })
public ResponseEntity<Object> CustomhandleApiRequestException(CustomException ex) {
// ExceptionDto는 화면에 보여줄 내용을 정의
return ResponseEntity.status(ex.getCustomErrorEnum().getStatus()).body(new CustomExceptionDto(ex));
}
CustomErrorEnum
- 예외 처리의 Enum을 정의 (HttpStatus와 메세지를 사용할 수 있게 정의하였다.)
@Getter
@AllArgsConstructor
public enum CustomErrorEnum {
NOROLE(HttpStatus.UNAUTHORIZED, "권한 없숩"),
NOPOST(HttpStatus.BAD_REQUEST, "게시글 없숨");
private HttpStatus status;
private String message;
}
CustomException
- CustomErrorEnum으로 예외 처리를 하도록 Exception class를 커스텀 함
@Getter
public class CustomException extends RuntimeException {
private CustomErrorEnum customErrorEnum;
public CustomException(CustomErrorEnum customErrorEnum) {
this.customErrorEnum = customErrorEnum;
}
}
Service
- 커스텀 예외 처리 예시
throw new CustomException(CustomErrorEnum.NOROLE)
CustomExceptionDto
- 예외 처리의 정보를 클라이언트로 보내줄 형태 (errorCode, httpStatus, 메세지를 날릴 예정)
@Getter
@Setter
public class CustomExceptionDto {
private int errorCode;
private HttpStatus httpStatus;
private String msg;
public CustomExceptionDto(CustomException ex) {
this.errorCode = ex.getCustomErrorEnum().getStatus().value();
this.httpStatus = ex.getCustomErrorEnum().getStatus();
this.msg = ex.getCustomErrorEnum().getMessage();
}
}
728x90
'개발일기 > Java' 카테고리의 다른 글
Cors 에러가 뜨는 이유와 해결 (0) | 2023.03.20 |
---|---|
userDetails 유저 정보 받아오기 비회원일 때 (0) | 2023.03.19 |
Spring Security 사용 시 Swagger 설정 (0) | 2023.03.15 |
스프링 테스트 프레임워크 사용하기 (0) | 2023.03.11 |
PostMan jwt 토큰 한 번에 설정하기 (0) | 2023.03.11 |