### Filters MockMvc will run (MockMvc.filters, outermost first)
  OrderedCharacterEncodingFilter
  OrderedFormContentFilter
  OrderedRequestContextFilter
  RawFilter
  AccessLogFilter
  ApiKeyFilter
  VisibilityFilter
  BodyFilter
  FaultFilter

### GET /api/hello/ankur  MockMvc: HTTP 200, 15 trace lines
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /api/hello/ankur
03 REQUEST  interceptor:A                  preHandle  handler=HandlerMethod HelloController#hello
04 REQUEST  interceptor:B                  preHandle  handler=HandlerMethod HelloController#hello
05 REQUEST  aspect:controller              before HelloController#hello args=[ankur]
06 REQUEST  controller                     hello(ankur)
07 REQUEST  aspect:service                 before GreetingService#greet args=[ankur]
08 REQUEST  aspect:service                 after  GreetingService#greet returned=Hello, ankur
09 REQUEST  aspect:controller              after  HelloController#hello returned=Hello, ankur (String)
10 REQUEST  interceptor:B                  postHandle status=200 modelAndView=null
11 REQUEST  interceptor:A                  postHandle status=200 modelAndView=null
12 REQUEST  interceptor:B                  afterCompletion ex=null
13 REQUEST  interceptor:A                  afterCompletion ex=null
14 REQUEST  filter:accessLog(order 10)     after chain status=200 asyncStarted=false
15 REQUEST  filter:raw(order 5)            after chain

### GET /api/hello/ankur  real Tomcat: HTTP 200, 17 trace lines
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /api/hello/ankur
03 REQUEST  servlet:DispatcherServlet      doDispatch start
04 REQUEST  interceptor:A                  preHandle  handler=HandlerMethod HelloController#hello
05 REQUEST  interceptor:B                  preHandle  handler=HandlerMethod HelloController#hello
06 REQUEST  aspect:controller              before HelloController#hello args=[ankur]
07 REQUEST  controller                     hello(ankur)
08 REQUEST  aspect:service                 before GreetingService#greet args=[ankur]
09 REQUEST  aspect:service                 after  GreetingService#greet returned=Hello, ankur
10 REQUEST  aspect:controller              after  HelloController#hello returned=Hello, ankur (String)
11 REQUEST  interceptor:B                  postHandle status=200 modelAndView=null
12 REQUEST  interceptor:A                  postHandle status=200 modelAndView=null
13 REQUEST  interceptor:B                  afterCompletion ex=null
14 REQUEST  interceptor:A                  afterCompletion ex=null
15 REQUEST  servlet:DispatcherServlet      doDispatch end
16 REQUEST  filter:accessLog(order 10)     after chain status=200 asyncStarted=false
17 REQUEST  filter:raw(order 5)            after chain

### GET /nope  MockMvc: HTTP 404, 8 trace lines
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /nope
03 REQUEST  interceptor:A                  preHandle  handler=ResourceHttpRequestHandler
04 REQUEST  interceptor:B                  preHandle  handler=ResourceHttpRequestHandler
05 REQUEST  interceptor:B                  afterCompletion ex=null
06 REQUEST  interceptor:A                  afterCompletion ex=null
07 REQUEST  filter:accessLog(order 10)     after chain status=404 asyncStarted=false
08 REQUEST  filter:raw(order 5)            after chain

### GET /nope  real Tomcat: HTTP 404, 19 trace lines
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /nope
03 REQUEST  servlet:DispatcherServlet      doDispatch start
04 REQUEST  interceptor:A                  preHandle  handler=ResourceHttpRequestHandler
05 REQUEST  interceptor:B                  preHandle  handler=ResourceHttpRequestHandler
06 REQUEST  interceptor:B                  afterCompletion ex=null
07 REQUEST  interceptor:A                  afterCompletion ex=null
08 REQUEST  servlet:DispatcherServlet      doDispatch end
09 REQUEST  filter:accessLog(order 10)     after chain status=404 asyncStarted=false
10 REQUEST  filter:raw(order 5)            after chain
11 ERROR    servlet:DispatcherServlet      doDispatch start
12 ERROR    interceptor:A                  preHandle  handler=HandlerMethod BasicErrorController#error
13 ERROR    interceptor:A                    error attributes: status=404 exception=null
14 ERROR    interceptor:B                  preHandle  handler=HandlerMethod BasicErrorController#error
15 ERROR    interceptor:B                  postHandle status=404 modelAndView=null
16 ERROR    interceptor:A                  postHandle status=404 modelAndView=null
17 ERROR    interceptor:B                  afterCompletion ex=null
18 ERROR    interceptor:A                  afterCompletion ex=null
19 ERROR    servlet:DispatcherServlet      doDispatch end

### GET /api/unhandled  MockMvc: perform() THREW ServletException (cause UnsupportedOperationException)
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /api/unhandled
03 REQUEST  interceptor:A                  preHandle  handler=HandlerMethod HelloController#unhandled
04 REQUEST  interceptor:B                  preHandle  handler=HandlerMethod HelloController#unhandled
05 REQUEST  aspect:controller              before HelloController#unhandled args=[]
06 REQUEST  controller                     unhandled() about to throw
07 REQUEST  aspect:controller              after  HelloController#unhandled THREW UnsupportedOperationException
08 REQUEST  interceptor:B                  afterCompletion ex=UnsupportedOperationException
09 REQUEST  interceptor:A                  afterCompletion ex=UnsupportedOperationException
10 REQUEST  filter:accessLog(order 10)     after chain status=200 asyncStarted=false
11 REQUEST  filter:raw(order 5)            after chain

### GET /api/async-callable  MockMvc, after perform() and before asyncDispatch: asyncStarted=true
01 REQUEST  filter:raw(order 5)            before chain
02 REQUEST  filter:accessLog(order 10)     before chain GET /api/async-callable
03 REQUEST  interceptor:A                  preHandle  handler=HandlerMethod HelloController#asyncCallable
04 REQUEST  interceptor:B                  preHandle  handler=HandlerMethod HelloController#asyncCallable
05 REQUEST  aspect:controller              before HelloController#asyncCallable args=[]
06 REQUEST  controller                     asyncCallable() returns a Callable
07 REQUEST  aspect:controller              after  HelloController#asyncCallable returned=a lambda (HelloController$$Lambda)
08 REQUEST  interceptor:B                  afterConcurrentHandlingStarted (async began, no postHandle/afterCompletion yet)
09 REQUEST  interceptor:A                  afterConcurrentHandlingStarted (async began, no postHandle/afterCompletion yet)
10 REQUEST  filter:accessLog(order 10)     after chain status=200 asyncStarted=true
11 REQUEST  filter:raw(order 5)            after chain
12 REQUEST  callable                       finished after 100 ms, returning

### ... then mvc.perform(MockMvcRequestBuilders.asyncDispatch(result))
01 ASYNC    interceptor:A                  preHandle  handler=HandlerMethod HelloController#asyncCallable
02 ASYNC    interceptor:B                  preHandle  handler=HandlerMethod HelloController#asyncCallable
03 ASYNC    interceptor:B                  postHandle status=200 modelAndView=null
04 ASYNC    interceptor:A                  postHandle status=200 modelAndView=null
05 ASYNC    interceptor:B                  afterCompletion ex=null
06 ASYNC    interceptor:A                  afterCompletion ex=null
