Ve Spring Bootu (Spring MVC) prochází požadavek přes servlet container, řetězec Filtrů, centrální DispatcherServlet, poté interceptory a váš @Controller, a návratová hodnota se převede na HTTP odpověď.
Ve Spring Bootu (Spring MVC) prochází požadavek přes servlet container, řetězec Filtrů, centrální DispatcherServlet, poté interceptory a váš @Controller, a návratová hodnota se převede na HTTP odpověď.
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── front controller
▼
HandlerMapping ── najde metodu @Controller
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bind @RequestBody / @PathVariable / @RequestParam
▼
Controller method ── vaše logika → vrací object nebo ResponseEntity
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── serializace do JSON nebo vykreslení view
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter. Filtry (včetně Spring Security) jsou nejvnější vrstva a mohou požadavek zablokovat nebo obalit dřív, než jej MVC uvidí.preHandle — HandlerInterceptory běží před controllerem (kontroly autentizace, logování, měření času); vrácení false požadavek zastaví.@PathVariable, @RequestParam a @RequestBody (přes HttpMessageConverter) se navážou (bind) a zvalidují.@RestController spustí byznys logiku a vrátí object nebo ResponseEntity.postHandle, poté se návratová hodnota serializuje pomocí HttpMessageConverter (JSON přes Jackson) nebo se view vykreslí pomocí ViewResolver.afterCompletion běží poté, co je odpověď potvrzena (committed); @ExceptionHandler/@ControllerAdvice zpracovávají výjimky po cestě.// 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 = zkratování
}
}
// 6. controller
@RestController
class ItemController {
@GetMapping("/items/{id}") // 3. mapping
ResponseEntity<Item> show(@PathVariable Long id) { // 5. rozlišení argumentů
return ResponseEntity.ok(service.find(id)); // 7. serializace do JSON
}
}
Životní cyklus Springu má dvě odlišné rozšiřující vrstvy, které tazatelé rádi zkoumají: Filtry (na úrovni servletu, nejvnější — kde žije Spring Security) a Interceptory (na úrovni Spring MVC, kolem controlleru). Znalost pořadí — filtry, DispatcherServlet, mapping, interceptor preHandle, navázání argumentů, controller, konverze zprávy, afterCompletion — vám řekne, kam umístit autentizaci vs. logování, proč Security filtr odmítne požadavek dřív, než se spustí jakýkoli interceptor nebo controller, a jak @ControllerAdvice centralizuje zpracování výjimek napříč celým tokem.
Knihovna IT otázek k pohovoru s podrobnými odpověďmi — od Junior po Senior.
Přispět