티스토리 뷰
프로그램의 오류 두가지
1. 컴파일 에러 (컴파일 중 발생하는 에러)
2. 런타임 에러 (어플리케이션 실행 중 발생하는 에러)
자바
1. 에러 - JVM 실행에 문제 -> 개발자가 해결할 수 없음
2. 예외 - 사용자의 잘못된 조작 or 개발자의 잘못된 코딩으로 발생
둘의 공통점 : 둘다 프로그램이 예기치 못하게 종료된다
예외는 예외처리를 통해 프로그램의 종료를 막고 정상 실행할 수 있다
- Exception 클래스는 자바 모든 예외의 조상이 되는 클래스
해결방법 : 예외가 발생하는 시점에 RuntimeException클래스를 상속받아 만든 예외처리 메소드를 실행시켜줘야 한다
Springboot에서의 예외처리 방법 3가지
1. @ControllerAdvice - 전역 예외처리 지원
2. @ExceptionHandler - 컨트롤러단에서의 예외처리 지원
3. try/catch - 메소드단에서의 예외처리 지원
1. @ControllerAdvice / @RestController를 사용한 예외처리 방법
-이 어노테이션이 붙은 클래스가 예외처리 후 REST 응답을 리턴함
HomeController.class
@RestController
@RequestMapping({"/"})
public class HomeController {
@RequestMapping("/ex1")
public String ex1(){
// 전역 처리자 메소드 handleBaseException에 잡힐 것이다.
throw new BaseException("Base Exception");
}
}
출처: https://springboot.tistory.com/33 [스프링부트는 사랑입니다]
GlobalExceptionHandler.class
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(value = BaseException.class)
public String handleBaseException(BaseException e){
return e.getMessage();
}
}
출처: https://springboot.tistory.com/33 [스프링부트는 사랑입니다]
-BaseException클래스 내의 메소드를 실행하여 예외를 잡고 리턴(응답)해준다
-@ResponseStatus를 사용하여 응답 상태(400,401 ...)를 설정해준다
- @ControllerAdvice: 전역 처리이므로 모든 컨트롤러에서 발생하는 예외에 대한 처리를 해준다
BaseException.class
public abstract class BaseException extends RuntimeException {
private String message;
public BaseException(String message) {
super(message);
this.message = message;
}
}
2. @ExceptionHandler만을 사용한 컨트롤러단 예외처리 방법
HomeController.class
@RestController
@RequestMapping({"","/"})
public class HomeController {
@RequestMapping("/ex")
public String ex(){
// 컨트롤러 예외 처리자 메소드 nfeHandler에 잡힐 것이다.
throw new NumberFormatException("number format exception");
}
@ExceptionHandler(value = NumberFormatException.class)
public String nfeHandler(NumberFormatException e){
return e.getMessage();
}
출처: https://springboot.tistory.com/33 [스프링부트는 사랑입니다]
- nfeHandler 메소드는 해당 컨트롤러 내에서 발생하는 NumberForment에 대한 예외처리를 해준다
-> 다른 컨트롤러에 대한 처리를 하지않음
'BackEnd > SpringBoot' 카테고리의 다른 글
[spring] - JUnit4를 이용하여 스프링부트 테스트 하기 (0) | 2020.08.08 |
---|---|
[spring] - @RequestParam과 @PathVariable의 차이 (0) | 2020.07.28 |
[spring]-Gradle을 이용한 멀티 모듈 프로젝트 생성하기 (0) | 2020.07.16 |
[spring]-스프링 부트와 AWS로 혼자 구현하는 웹 서비스(2) (0) | 2020.07.13 |
[spring]-스프링 부트와 AWS로 혼자 구현하는 웹 서비스(1) (0) | 2020.07.13 |