@ExceptionHandler
@Controller
public class MyController {
@GetMapping("/example")
public String exampleMethod() {
// 여기에 코드 작성
throw new CustomException("사용자 정의 예외입니다");
}
@ExceptionHandler(CustomException.class)
public ResponseEntity<String> handleCustomException(CustomException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}
ExceptionHandlerExceptionResolver
- 스프링 기본 제공
- 기본 제공
ExceptionResolver
중에 우선 순위가 가장 높다.
- 컨트롤러 메서드의 실행 중 발생하는 특정 예외를 처리할 컨트롤러 클래스 내의 메서드를 정의하는 데 사용
- 사용법
@ExceptionHandler
선언- 해당 컨트롤러에서 처리하고 싶은 예외 지정
- 해당 컨트롤러에서 예외 발생 시,
@ExceptionHandler
이 선언된 메서드 호출 - 지정한 예외 및 그 예외의 자식 클래스를 모두 잡는다.
- 우선 순위
- 스프링의 우선순위는 항상 자세한 것이 우선권을 가진다.
- 자식 예외가 발생할 경우,
부모 예외처리()
와자식 예외처리()
중자식 예외처리()
호출 - 부모 예외가 발생할 경우,
부모 예외처리()
만 호출 대상이 되므로부모 예외처리()
호출
- 예외 생략
@ExceptionHandler
의 예외 생략 시, 메서드 파라미터의 예외 지정
// UserException 예외를 처리한다.
@ExceptionHandler
public ResponseEntity<ErrorResult> userExHandle(UserException e) {}
- 다양한 예외 유형 처리
@ExceptionHandler
에 배열로 제공
@Controller
public class MyController {
@GetMapping("/example1")
public String exampleMethod1() { // 사용자 정의 예외 'CustomException1'을 발생시키는 메서드
// Your code here
throw new CustomException1("This is a custom exception 1");
}
@GetMapping("/example2")
public String exampleMethod2() { // 사용자 정의 예외 'CustomException2'을 발생시키는 메서드
// Your code here
throw new CustomException2("This is a custom exception 2");
}
@ExceptionHandler({CustomException1.class, CustomException2.class})
public ResponseEntity<String> handleMultipleExceptions(Exception ex) {
// 두 가지 예외 유형을 모두 처리하고 HTTP 응답을 반환
// 상태는 400 Bad Request이며, 각각의 예외 메시지를 본문에 포함
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
}
- @RequestMapping 메소드와 같은 방식으로 method arguments 사용 가능
- @RequestParam, @PathVariable, @RequestHeader
- request body가 이미 소비된 경우
- 예외가 발생한 시점에 이미 요청이 처리되어 버퍼에서 읽혀져 소비된 경우
- 요청 본문과 관련된 메소드 인자 사용 불가
- @RequestMapping 메소드와 같은 방식으로 return Values 사용 가능
- ResponseEntity, Model, ModelAndView 등 반환
'Develop > Spring' 카테고리의 다른 글
[Spring Web MVC] Exceptions - @ControllerAdvice (0) | 2023.04.17 |
---|---|
[Spring Web MVC] Handler Methods - Return Values (0) | 2023.04.17 |
[Spring Web MVC] Handler Methods - MethodArgument (0) | 2023.04.17 |
[Spring Web MVC] Request Mapping - consumes, produces (0) | 2023.04.17 |
[Spring Web MVC] Request Mapping - Parameters, headers (0) | 2023.04.17 |