잡히지 않은 예외는 ERROR dispatch로 다시 들어온다

처음 요청에서 빠져나온 예외를 container가 ERROR dispatch로 전환하며 원래 URI와 status는 request attribute에 보존한다.

REQUEST

원래 handler

최초 URI에서 controller 또는 resource를 실행한다.

UNHANDLED

Container 전파

Resolver가 처리하지 못한 예외가 servlet 밖으로 나간다.

ERROR

두 번째 dispatch

현재 path는 error endpoint이고 원래 정보는 attribute에 있다.

FALLBACK

안전한 응답

내부 예외를 숨기고 status와 request ID만 공개한다.

REQUEST와 ERROR는 같은 HTTP 요청이지만 서로 다른 dispatch다

핵심: ERROR dispatch에서는 현재 path와 최초 실패 path를 같은 값으로 착각하면 안 된다.