티스토리 뷰

BackEnd/SpringBoot

[Spring]-REST 어플리케이션 예외처리

영지는 달리는중 2020. 7. 22. 14:45

프로그램의 오류 두가지

1. 컴파일 에러 (컴파일 중 발생하는 에러)

2. 런타임 에러 (어플리케이션 실행 중 발생하는 에러)

 

자바

1. 에러 - JVM 실행에 문제 -> 개발자가 해결할 수 없음

2. 예외 - 사용자의 잘못된 조작 or 개발자의 잘못된 코딩으로 발생 

둘의 공통점 : 둘다 프로그램이 예기치 못하게 종료된다

예외는 예외처리를 통해 프로그램의 종료를 막고 정상 실행할 수 있다

 

출처 : tcp school

- 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에 대한 예외처리를 해준다

-> 다른 컨트롤러에 대한 처리를 하지않음

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함