When Spring Web MVC returns 404 in response to our request it means that cannot find handler for request "signature". As a signature we mean
request mapping
and
request parameters
.
How Spring resolves handler for a given url address?
The class responsible for matching mappings with requests is
org.springframework.web.servlet.DispatcherServlet
. The specific handler will be determined by applying handler mappings. Method responsible for that is called
getHandler
and it takes HTTP servlet request (Good old javax.servlet.http.HttpServletRequest instance). It basically goes through all registered handler mappings and tests each in order. The first match win. As the result, it returns an object of HandlerExecutionChain class.
AbstractHandlerMethodMapping.java
protected HandlerMethod lookupHandlerMethod(String lookupPath, HttpServletRequest request) throws Exception {..}
Resolving details
At first, it looks for a direct match. eg
/api/logs/3/4
Next, it starts to look for matching patterned paths eg. /api/logs/{parent}/{child}. Takes all matched and is looking for the best match.