첫번째 방식, Global(전역)처리 방식
1. Global(전역)처리 방식 - @RestControllerAdvice (rest), @ControllerAdvice (view)
- 화면을 리턴하지 않고 Rest방식으로 사용할 경우 @RestControllerAdvice,
화면(jsp, html)을 리턴하는 @ControllerAdvice를 사용하면 된다.
- basePackages 속성을 지정하면, 해당 패키지 내에서만 Exception 처리가 가능하다.
- basePackageClasses 속성을 지정하면, 해당 클래스 내에서만 Exception 처리가 가능하다.
- @ExceptionHandler에 value를 통해 어떤 Exception을 처리할 것인지 지정할 수 있다.
@RestControllerAdvice(basePackages = "com.example")
public class GlobalControllerAdvice {
@ExceptionHandler(value = Exception.class)
public ResponseEntity exception(Exception e){
System.out.println(e.getClass().getName());
System.out.println("-------------------------------");
System.out.println(e.getLocalizedMessage());
System.out.println("-------------------------------");
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("");
}
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public ResponseEntity methodArgumentNotValidException(MethodArgumentNotValidException e){
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
}
}
2. Class 내에 @ExceptionHandler 지정 방식
- @ExceptionHandler은 @RestControllerAdvice (rest),@ControllerAdvice (view) 필요 조건이 아니다.
- 해당 Class 안에서만 처리할 Exception이 있는 경우 사용하면 된다.
@RestController
@RequestMapping("/api/user")
public class ApiController {
...
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public ResponseEntity methodArgumentNotValidException(MethodArgumentNotValidException e){
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
}
}
우선순위는 Global(전역) < Class이므로, 전역으로 지정해도 Class내부에 처리가 있다면 Class를 따라간다!
'백엔드 > SpringBoot' 카테고리의 다른 글
[ 스프링부트 / Spring Boot ] Interceptor (0) | 2021.06.26 |
---|---|
[ 스프링부트 / Spring Boot ] Filter (2) | 2021.06.26 |
[스프링 부트 / SpringBoot] Intellij Community 버전 프로젝트 세팅 (0) | 2021.06.10 |
[Spring Boot + WebSocket+ 네이버 Chatbot] 챗봇 만들기 - 2 (2) | 2021.06.10 |
[Spring Boot + WebSocket+ 네이버 Chatbot] 챗봇 만들기 - 1 (0) | 2021.06.09 |