Excepton 발생 시 @ExceptionHandler를 사용하여 응답 처리를 할 수있다.
사용자 정의 Exception 클래스 생성
차량을 매입할때 이미 존재하는 차량 번호일 경우 발생시킬 Exception 클래스를 생성한다.
RunTimeException을 상속받고 생성자를 만들어 준다.
public class DuplicatedCarNumberException extends RuntimeException {
public DuplicatedCarNumberException() {
}
public DuplicatedCarNumberException(String message) {
super(message);
}
public DuplicatedCarNumberException(String message, Throwable cause) {
super(message, cause);
}
public DuplicatedCarNumberException(Throwable cause) {
super(cause);
}
}
서비스 로직 구현
private void validateDuplicateCar(CarSaveRequestDto requestDto) {
int count = carRepository.countByCarNumber(requestDto.getCarNumber());
if (count > 0) {
throw new DuplicatedCarNumberException("이미 매입되어있는 차량입니다.(차량번호: " + requestDto.getCarNumber() + ")");
}
}
ExceptionController 생성
DuplicatedCarNumberException 발생 시 duplicatedCarNumberHandler 메서드가 호출되고,
그 외 정의하지 않은 Exception 발생 시 exceptionHandler 메서드가 호출된다.
@RestController
@Slf4j
public class ExceptionController {
@ExceptionHandler(Exception.class)
public ResponseEntity<?> exceptionHandler(Exception e) {
log.info("\n\n=== Exception ===\n* message: " + e.getMessage());
return ResponseEntity.badRequest().body(CommonResponseDto.createResponseDto(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), "시스템 오류"));
}
@ExceptionHandler(DuplicatedCarNumberException.class)
public ResponseEntity<?> duplicatedCarNumberHandler(DuplicatedCarNumberException e) {
log.info("\n\n=== DuplicatedCarNumberException ===\n* message: " + e.getMessage());
return ResponseEntity.badRequest().body(CommonResponseDto.createResponseDto(String.valueOf(HttpStatus.BAD_REQUEST.value()), e.getMessage()));
}
}
결과 확인
MockHttpServletResponse:
Status = 400
Error message = null
Headers = [Content-Type:"application/json;charset=UTF-8"]
Content type = application/json;charset=UTF-8
Body = {"status":"400","message":"이미 매입되어있는 차량입니다.(차량번호: 04구4716)","data":null,"responseDate":"2021-05-13T17:12:11.1067123"}
Forwarded URL = null
Redirected URL = null
Cookies = []
'Spring' 카테고리의 다른 글
[SpringSecurity] 구글 로그인 연동하기 1 - 구글 서비스 등록 (1) | 2021.06.10 |
---|---|
Error 페이지 처리하기 (0) | 2021.05.26 |
REST API 응답 한글깨짐 해결방법 (0) | 2021.05.13 |
Errors 객체를 ResponseEntity body에 담아서 JSON 형태로 리턴하기 (0) | 2021.05.12 |
MediaType.APPLICATION_JSON_UTF8가 deprecated 되었다 (0) | 2021.05.12 |
댓글