복붙노트

[SPRING] Spring MVC / Spring Boot를 사용하여 적절한 전역 오류 처리기를 작성하는 방법

SPRING

Spring MVC / Spring Boot를 사용하여 적절한 전역 오류 처리기를 작성하는 방법

나는 Spring 4.0.4와 Spring Boot 1.0.2가있는 웹 애플리케이션을 Tomcat을 내장 웹 컨테이너로 사용하고 있으며 모든 예외를 가로 채고 특정 방식으로 로그하는 전역 예외 처리를 구현하려고한다. 내 간단한 요구 사항은 다음과 같습니다.

지금까지 내 솔루션은 다음과 같습니다 (단순화, 로깅 없음 및 오류보기로 리디렉션 없음).

@Controller
@RequestMapping("/errors")
public class ErrorHandler implements EmbeddedServletContainerCustomizer
{
    @Override
    public void customize(final ConfigurableEmbeddedServletContainer factory)
    {
        factory.addErrorPages(new ErrorPage("/errors/unexpected"));
        factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/notfound"));
    }

    @RequestMapping("unexpected")
    @ResponseBody
    public String unexpectedError(final HttpServletRequest request)
    {
        return "Exception: " + request.getAttribute("javax.servlet.error.exception");
    }

    @RequestMapping("notfound")
    @ResponseBody
    public String notFound()
    {
        return "Error 404";
    }
}

결과는 컨트롤러에서 throw 된 예외가 unexpectedError 메서드에 의해 올바르게 처리되고 404 상태 코드가 notFound 메서드에 의해 처리된다는 것입니다. 지금까지는 그렇게 좋았지 만 다음과 같은 문제가 있습니다.

그렇다면이 문제를 어떻게 해결할 수 있습니까? 아니면이 글로벌 예외 처리기를 구현 한 방식이 완전히 잘못되어 더 나은 대안이 있을까요?

해결법

  1. ==============================

    1.ControllerAdvice 살펴보기 다음과 같이 할 수 있습니다.

    ControllerAdvice 살펴보기 다음과 같이 할 수 있습니다.

    @ControllerAdvice
    public class ExceptionHandlerController {
    
        public static final String DEFAULT_ERROR_VIEW = "error";
    
        @ExceptionHandler(value = {Exception.class, RuntimeException.class})
        public ModelAndView defaultErrorHandler(HttpServletRequest request, Exception e) {
                ModelAndView mav = new ModelAndView(DEFAULT_ERROR_VIEW);
    
            mav.addObject("datetime", new Date());
            mav.addObject("exception", e);
            mav.addObject("url", request.getRequestURL());
            return mav;
        }
    }
    
  2. from https://stackoverflow.com/questions/23580509/how-to-write-a-proper-global-error-handler-with-spring-mvc-spring-boot by cc-by-sa and MIT license