• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

오류 html 페이지 응답 시 상태 코드 지정하는 방법

24.03.06 01:23 작성 24.03.06 01:25 수정 조회수 156

1

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예

[질문 내용]
개발자는 오류 html 페이지 응답으로 예외를 처리할 때 /error/4xx.html , /error/500.html 와 같은 경로에 html 페이지를 생성하기만 하면 된다고 이해하였습니다.

 

그러면 예외가 발생했을 경우 오류 html 페이지 응답으로 예외를 처리하고자 할 때, 발생된 예외에 대한 상태 코드를 지정해줘야 지정된 위치로 올바른 상태 코드에 대한 오류 페이지가 출력되므로,

상태 코드를 지정하는 방법은 HandlerExceptionResolver을 구현하여 오버라이딩 한 resolveException() 내부에 response.sendError()로 상태 코드를 지정하고 빈 ModelAndView 객체를 리턴하는 게 최선일까요?? 아니면 다른 상태 코드 지정 방법이 또 있을까요??

 

물론 @ExceptionHandler을 통하여 @ResponseStatus로 상태 코드를 지정해서 구현할 수도 있을 것 같긴 하지만 선생님께서 @ExceptionHandler는 API 예외 처리일 때 쓰는 것이 좋다고 하셔서 질문드립니다 !

 

답변 2

·

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.08

안녕하세요, 인프런 AI 인턴입니다.

경민님의 질문에 답변드리겠습니다.

Spring Boot에서는 특정 HTTP 상태 코드에 대한 사용자 정의 오류 페이지를 생성하기 위하여, 해당 상태 코드의 이름으로 된 파일을 /error 디렉토리에 추가하는 방식을 제공합니다. 예를 들어, 404 상태 코드에 대한 오류 페이지를 설정하는 경우 src/main/resources/public/error/404.html 같은 경로에 HTML 파일을 두면 됩니다.

만약 상태 코드를 프로그래밍적으로 지정하고 싶다면, HandlerExceptionResolver 인터페이스를 구현한 클래스를 생성하고 resolveException() 메서드 내에 response.sendError()를 호출하는 방법을 사용할 수 있습니다. 다만, 이는 전통적인 Spring MVC에서 많이 사용하던 방식입니다.

또한, Spring Boot에서는 @ExceptionHandler를 사용하여 예외를 처리하고, @ResponseStatus를 사용하여 HTTP 상태 코드를 직접 지정할 수 있습니다. 이 방법은 @ControllerAdvice를 이용하여 애플리케이션 전역에 걸쳐 예외를 처리할 수 있게 해주며, 더 세련된 처리가 가능합니다.

마지막으로, ErrorViewResolver 인터페이스를 구현하는 방법도 있습니다. 이 인터페이스를 구현하면 보다 복잡한 상태 코드 매핑이 가능하며, 발생한 오류 상태 코드에 따라 적합한 ModelAndView를 반환할 수 있습니다. 예를 들어, 다음과 같은 방식으로 HttpStatus.INSUFFICIENT_STORAGE 상태 코드에 대응하는 뷰를 정의할 수 있습니다:

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.ModelAndView;

public class MyErrorViewResolver implements ErrorViewResolver {

    @Override
    public ModelAndView resolveErrorView(HttpServletRequest request, HttpStatus status, Map<String, Object> model) {
        // Use the request or status to optionally return a ModelAndView
        if (status == HttpStatus.INSUFFICIENT_STORAGE) {
            // We could add custom model values here
            return new ModelAndView("myview");
        }
        return null;
    }
}

이처럼 Spring Framework는 다양한 방식으로 예외와 상태 코드를 처리할 방법을 제공하며, 상황에 따라 적절한 방법을 선택하여 사용할 수 있습니다.

참고하실 수 있도록 관련 문서의 링크를 첨부합니다:
Spring Boot Reference Documentation - Error Handling

추가적인 질문이 있으시면 언제든지 문의해 주세요.

0

안녕하세요. 경민님 🙂

간단하게 답을 말씀드리자면 @ControllerAdvice와 @ExceptionHandler를 사용하셔도 괜찮습니다.

감사합니다.

경민님의 프로필

경민

질문자

2024.03.08

감사합니다 !