본문 바로가기
Spring/MVC

스프링 API 예외 처리

by o3oppp 2024. 7. 21.
스프링 부트가 기본으로 제공하는 ExceptionResolver
  • HandlerExceptionResolverComposite에 다음 순서로 등록
    1. ExceptionHandlerExceptionResolver
    2. ResponseStatusExceptionResolver
    3. DefaultHandlerExceptionResolver

ResponseStatusExceptionResolver
  • 예외에 따라서 HTTP 상태 코드를 지정해주는 역할
  • @ResponseStatus가 달려있는 예외를 처리
  • ResponseStatusException 예외를 처리

1. @ResponseStauts

  • Excepiton 정의
@ResponseStatus(code = HttpStatus.BAD_REQUEST, reason = "잘못된 요청 오류")
public class BadRequestException extends RuntimeException{

}
  • 컨트롤러
@Slf4j
@RestController
public class ApiExceptionController {

    @GetMapping("/api/response-status-ex1")
    public String responseStatusEx1(){
        throw new BadRequestException();
    }
}
  • 결과

2. ResponseStatusException

  • @ResponseStatus는 개발자가 직접 변경할 수 없는 예외(라이브러리 예외 등)에는 적용 불가
  • 또한 조건에 따라 동적으로 변경하는 것이 어려움
  • 이때 사용하는 것이 ResponseStatusException
  • 컨트롤러
@Slf4j
@RestController
public class ApiExceptionController {

    @GetMapping("/api/response-status-ex2")
    public String responseStatusEx2(){
        throw new ResponseStatusException(HttpStatus.NOT_FOUND, "잘못된 요청 오류", new IllegalArgumentException());
    }
}
  • 결과


DefaultHandlerExceptionResolver
  • 스프링 내부에서 발생하는 스프링 예외를 해결
  • 예를들어 클라이언트의 잘못된 HTTP 요청으로 TypeMismatchException이 발생하는 경우 결과적으로 500 error가 발생
  • 하지만 실질적인 오류는 클라이언트의 잘못된 HTTP 요청으로 인한 400 error
  • 이런 경우 500 error가 아닌 400 error로 변경할 때 사용
  • 컨트롤러
@Slf4j
@RestController
public class ApiExceptionController {

    @GetMapping("/api/default-handler-ex")
    public String defaultException(@RequestParam Integer data){
        return "ok";
    }
}
  • 결과

data에 String 전달 시

 

'Spring > MVC' 카테고리의 다른 글

파일 업로드  (0) 2024.08.05
API 예외 처리  (0) 2024.07.21
HttpEntity  (0) 2024.07.21
서블릿 예외 처리  (0) 2024.07.20
스프링 인터셉터  (0) 2024.07.11