U Spring Bootu (Spring MVC) zahtjev prolazi kroz servlet container, lanac Filtera, središnji DispatcherServlet, zatim interceptore i tvoj @Controller, a povratna vrijednost se pretvara u HTTP response.
U Spring Bootu (Spring MVC) zahtjev prolazi kroz servlet container, lanac Filtera, središnji DispatcherServlet, zatim interceptore i tvoj @Controller, a povratna vrijednost se pretvara u HTTP response.
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── front controller
▼
HandlerMapping ── pronađi @Controller metodu
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bindaj @RequestBody / @PathVariable / @RequestParam
▼
Controller metoda ── tvoja logika → vraća object ili ResponseEntity
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── serijaliziraj u JSON ili renderiraj view
▼
HandlerInterceptor.afterCompletion → Response ──▶ klijent
Filter. Filteri (uključujući Spring Security) su najvanjskiji sloj i mogu blokirati ili omotati zahtjev prije nego što ga MVC vidi.preHandle — HandlerInterceptori se izvršavaju prije controllera (provjere autha, logging, mjerenje vremena); vraćanje false zaustavlja zahtjev.@PathVariable, @RequestParam i @RequestBody (preko HttpMessageConverter) se bindaju i validiraju.@RestController metoda izvršava poslovnu logiku i vraća object ili ResponseEntity.postHandle, zatim se povratna vrijednost serijalizira preko HttpMessageConverter (JSON putem Jacksona) ili view renderira ViewResolver.afterCompletion se izvršava nakon što je response commitan; @ExceptionHandler/@ControllerAdvice obrađuju iznimke usput.// 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 = presijeci tok
}
}
// 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. serijalizirano u JSON
}
}
Springov životni ciklus ima dva različita sloja proširenja koja ispitivači vole propitivati: Filtere (na razini servleta, najvanjskije — gdje živi Spring Security) i Interceptore (na razini Spring MVC-a, oko controllera). Poznavanje redoslijeda — filteri, DispatcherServlet, mapping, interceptor preHandle, bindanje argumenata, controller, konverzija poruke, afterCompletion — govori ti gdje staviti autentikaciju naspram logginga, zašto Security filter odbija zahtjev prije nego što se ijedan interceptor ili controller pokrene te kako @ControllerAdvice centralizira obradu iznimki kroz cijeli tok.
Knjižnica IT pitanja za razgovore za posao s detaljnim odgovorima — od Juniora do Seniora.
Doniraj