IT/자바, 스프링

Controller Advice로 Exception 처리하기

thesse 2021. 8. 5. 14:15
300x250
반응형

 

500 Server Error를 400 Bad Request로 바꾸고 에러 원인을 명시해주고자 함

@ExceptionHandler, @ResponseStatus 그리고 @RestControllerAdvice를 이용한다

 

 

 

 

클래스

@RestControllerAdvice 어노테이션을 달아줌

이때 assignableType은 어드바이스를 적용할 클래스 이름 지정

 

@Slf4j
@RestControllerAdvice(assignableTypes = ActionController.class)
public class ActionControllerAdvice {
   ...
}

 

메서드

@ExceptionHandler 어노테이션 달고, 처리할 익셉션 종류 써줌

커스텀 익셉션 써도 되고 자바 기본 익셉션 써도 됨

    @ExceptionHandler(value = NoSuchElementException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    protected ErrorMessage NoSuchElementExceptionHandler(NoSuchElementException ex, WebRequest request){
        ...
    }

 

 

 

 

ActionControllerAdvice.java

@Slf4j
@RestControllerAdvice(assignableTypes = ActionController.class)
public class ActionControllerAdvice {

    @ExceptionHandler(value = NoSuchElementException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    protected ErrorMessage NoSuchElementExceptionHandler(NoSuchElementException ex, WebRequest request){
        log.info("ActionControllerAdvice : NoSuchElementExceptionException : "+ex.getMessage());

        return ErrorMessage.builder()
                .state("FAILED")
                .failReason("id not exist")
                .build();
    }
    
    ...

}

 

 

이렇게 하면 ActionController에서 발생하는 모든 NoSuchElementExceptionException은

컨트롤러 어드바이스에서 지정한 대로 처리됨

 

 

300x250
반응형