Loading...
Spring Framework Reference Documentation 7.0.2의 Exceptions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
See equivalent in the Reactive stack
request 매핑 중에 exception이 발생하거나 (예: @Controller와 같은) request 핸들러에서
exception이 throw되는 경우, DispatcherServlet은 exception을 resolve하고 대체 handling을 제공하기 위해
HandlerExceptionResolver bean의 chain에 위임하며, 이는 일반적으로 error 응답입니다.
다음 table은 사용 가능한 HandlerExceptionResolver implementation을 나열합니다:
HandlerExceptionResolver | Description |
|---|---|
SimpleMappingExceptionResolver | exception class name과 error view name 사이의 매핑입니다. browser 애플리케이션에서<br>error 페이지를 렌더링하는 데 유용합니다. |
DefaultHandlerExceptionResolver | Spring MVC에 의해 발생한 exception을 resolve하고 이를 HTTP status code에<br>매핑합니다. 대체 ResponseEntityExceptionHandler 및 Error Responses도 참조하세요. |
ResponseStatusExceptionResolver | @ResponseStatus 어노테이션이 있는 exception을 resolve하고 어노테이션의 값에 따라<br>이를 HTTP status code에 매핑합니다. |
ExceptionHandlerExceptionResolver | @Controller 또는 @ControllerAdvice class의 @ExceptionHandler 메서드를<br>호출하여 exception을 resolve합니다. @ExceptionHandler methods를 참조하세요. |
Table 1. HandlerExceptionResolver implementations
Spring 설정에서 여러 HandlerExceptionResolver bean을 선언하고 필요에 따라
그들의 order 프로퍼티를 설정하여 exception resolver chain을 구성할 수 있습니다.
order 프로퍼티가 높을수록 exception resolver는 더 나중에 위치합니다.
HandlerExceptionResolver의 contract는 다음을 return할 수 있다고 명시합니다:
ModelAndView.ModelAndView.null. 그리고
exception이 끝까지 남아 있는 경우, Servlet 컨테이너로 bubble up되는 것이 허용됩니다.MVC Config는 기본 Spring MVC
exception, @ResponseStatus가 어노테이션된 exception, 그리고
@ExceptionHandler 메서드 지원을 위해 built-in resolver를 자동으로 선언합니다.
해당 list를 커스터마이즈하거나 교체할 수 있습니다.
어떤 HandlerExceptionResolver에 의해서도 exception이 resolve되지 않고 따라서
전파되도록 남겨지거나 response status가 error status(즉, 4xx, 5xx)로 설정된 경우,
Servlet 컨테이너는 HTML로 default error 페이지를 렌더링할 수 있습니다.
컨테이너의 default error 페이지를 커스터마이즈하기 위해 web.xml에 error 페이지 매핑을 선언할 수 있습니다.
다음 example은 그 방법을 보여 줍니다:
1<error-page> 2 <location>/error</location> 3</error-page>
Copied!
앞선 example에 따라, exception이 bubble up되거나 response가 error status를 갖는 경우,
Servlet 컨테이너는 컨테이너 내에서 설정된 URL(예: /error)로 ERROR 디스패치를 수행합니다.
이는 이후 DispatcherServlet에 의해 처리되며, 가능하다면 이를 @Controller에 매핑하고,
해당 @Controller는 model과 함께 error view name을 return하도록 구현되거나
다음 example에서 보듯이 JSON 응답을 렌더링하도록 구현될 수 있습니다:
1@RestController 2public class ErrorController { 3 4 @RequestMapping(path = "/error") 5 public Map<String, Object> handle(HttpServletRequest request) { 6 Map<String, Object> map = new HashMap<>(); 7 map.put("status", request.getAttribute("jakarta.servlet.error.status_code")); 8 map.put("reason", request.getAttribute("jakarta.servlet.error.message")); 9 return map; 10 } 11}
Copied!
1@RestController 2class ErrorController { 3 4 @RequestMapping(path = ["/error"]) 5 fun handle(request: HttpServletRequest): Map<String, Any> { 6 val map = HashMap<String, Any>() 7 map["status"] = request.getAttribute("jakarta.servlet.error.status_code") 8 map["reason"] = request.getAttribute("jakarta.servlet.error.message") 9 return map 10 } 11}
Copied!
Note Servlet API는 Java에서 error 페이지 매핑을 생성하는 방법을 제공하지 않습니다. 그러나<br>
WebApplicationInitializer와 최소한의web.xml을 함께 사용할 수는 있습니다.
Interception
View Resolution