[SPRING] Spring MVC / Spring Boot를 사용하여 적절한 전역 오류 처리기를 작성하는 방법
SPRINGSpring 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.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; } }
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