Spring MVC의 예외 처리

코끼릭·2022년 5월 4일
0

IT

목록 보기
9/24

스프링에서 클라이언트의 요청을 서버가 처리할 때 발생하는 예외 처리의 방법은 크게 3가지가 있다. 이 방법들의 공통점은 스프링의 핵심 기술인 aop를 사용해 스프링이 로직을 수행할 때 발생하는 error를 대신 catch하고 개발자가 의도한 에러 메세지나 error status 정보로 응답해주기 때문에 개발자는 예외 처리를 비즈니스 로직 내에 작성하지 않아도 되는 관심사의 분리가 가능해진다.

@ExceptionHandler

특정 Controller나 RestController에서 발생하는 예외를 catch하는 아노테이션으로 아래의 사용 예시처럼 catch를 할 예외 클래스 지정이 가능하고 해당 아노테이션이 붙은 메소드에서는 예외 처리로 수행할 동작을 구현하면 된다.

@Controller
public class FooController{
    @ExceptionHandler({ CustomException1.class, CustomException2.class })
    public void handleException() {
        //
    }
}

@ControllerAdvice

특정 컨트롤러에만 적용되는 것이 아닌 빈으로 등록된 모든 컨트롤러에 대한 예외 처리 수행이 가능하게 하는 아노테이션으로 해당 클래스내 @ExcepitionHandler가 붙은 메소드로 예외 처리로 수행할 동작을 구현하면 된다.

@RestControllerAdvice
public class ProductControllerAdvice {
    @ExceptionHandler({MyException1.class})
    public String handleAllException(MyException1 exception) {
    	//JSON 포맷의 body에 해당 에러 메세지를 반환 할 수 있다.
        return exception.getMessage();
    }
    
    //responseEntity 객체로 헤더나 status 정보와 같은 정보를 담은객체를 반환할 수 있다.
    @ExceptionHandler({MyException2.class})
    public ResponseEntity handleAllException(MyException2 exception) {
        return ResponseEntity.status(HttpStatus.BAD_REQUEST)
        .body("Error");
    }
    
}

@ResponseStatus

간단한 예외 처리 기능으로 해당 아노테이션이 사용된 예외 클래스가 발생한 경우 개발자가 지정한 error status code 형태로 클라이언트에게 응답할 수 있다.

@ResponseStatus(code = HttpStatus.BAD_REQUEST)
class CustomException extends RuntimeException {
}

REST의 예외처리

profile
ㅇㅅㅇ

0개의 댓글