No Spring Boot (Spring MVC), uma requisição passa pelo servlet container, uma cadeia de Filters, o DispatcherServlet central, depois pelos interceptors e pelo seu @Controller, e o valor de retorno é convertido na resposta HTTP.
No Spring Boot (Spring MVC), uma requisição passa pelo servlet container, uma cadeia de Filters, o DispatcherServlet central, depois pelos interceptors e pelo seu @Controller, e o valor de retorno é convertido na resposta HTTP.
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── o front controller
▼
HandlerMapping ── encontra o método @Controller
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bind @RequestBody / @PathVariable / @RequestParam
▼
Controller method ── sua lógica → retorna objeto ou ResponseEntity
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── serializa para JSON ou renderiza a view
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter. Os Filters (incluindo o Spring Security) são a camada mais externa e podem bloquear ou envolver a requisição antes de o MVC a ver.preHandle — os HandlerInterceptors rodam antes do controller (verificações de auth, logging, medição de tempo); retornar false interrompe a requisição.@PathVariable, @RequestParam e @RequestBody (via HttpMessageConverter) são bindados e validados.@RestController roda a lógica de negócio e retorna um objeto ou ResponseEntity.postHandle, então o valor de retorno é serializado por um HttpMessageConverter (JSON via Jackson) ou uma view é renderizada por um ViewResolver.afterCompletion roda depois que a resposta é confirmada (commit); @ExceptionHandler/@ControllerAdvice tratam exceções ao longo do caminho.// 4/7/8. interceptor
public class TimingInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object h) {
req.setAttribute("started", System.nanoTime());
return true; // false = interrompe o fluxo
}
}
// 6. controller
@RestController
class ItemController {
@GetMapping("/items/{id}") // 3. mapping
ResponseEntity<Item> show(@PathVariable Long id) { // 5. argument resolution
return ResponseEntity.ok(service.find(id)); // 7. serializado para JSON
}
}
O ciclo de vida do Spring tem duas camadas de extensão distintas que os entrevistadores adoram sondar: Filters (nível de servlet, mais externos — onde vive o Spring Security) e Interceptors (nível de Spring MVC, em torno do controller). Conhecer a ordem — filters, DispatcherServlet, mapping, preHandle do interceptor, binding de argumentos, controller, conversão de mensagem, afterCompletion — diz onde colocar autenticação versus logging, por que um filtro de Security rejeita uma requisição antes de qualquer interceptor ou controller rodar, e como o @ControllerAdvice centraliza o tratamento de exceções em todo o fluxo.
Uma biblioteca de perguntas de entrevista de TI com respostas detalhadas — de Júnior a Sênior.
Doar