ใน Spring Boot (Spring MVC), request จะผ่าน servlet container, ห่วงโซ่ของ Filters, DispatcherServlet ส่วนกลาง, จากนั้น interceptors และ @Controller ของคุณ, และค่าที่ return จะถูกแปลงเป็น HTTP response
ใน Spring Boot (Spring MVC), request จะผ่าน servlet container, ห่วงโซ่ของ Filters, DispatcherServlet ส่วนกลาง, จากนั้น interceptors และ @Controller ของคุณ, และค่าที่ return จะถูกแปลงเป็น HTTP response
Servlet container (Tomcat)
▼
Filter chain ── (CharacterEncoding, Security, CORS, ...)
▼
DispatcherServlet ── front controller
▼
HandlerMapping ── ค้นหา method @Controller
▼
HandlerInterceptor.preHandle
▼
Argument resolvers ── bind @RequestBody / @PathVariable / @RequestParam
▼
Controller method ── logic ของคุณ → คืน object หรือ ResponseEntity
▼
HandlerInterceptor.postHandle
▼
HttpMessageConverter / ViewResolver ── serialize เป็น JSON หรือ render view
▼
HandlerInterceptor.afterCompletion → Response ──▶ client
Filter Filters (รวมถึง Spring Security) เป็นชั้นนอกสุดและสามารถบล็อกหรือห่อหุ้ม request ก่อนที่ MVC จะเห็นได้preHandle — HandlerInterceptor ทำงานก่อน controller (การตรวจสอบ auth, logging, การวัดเวลา); การคืนค่า false จะหยุด request@PathVariable, @RequestParam, และ @RequestBody (ผ่าน HttpMessageConverter) ถูก bind และ validate@RestController ของคุณรัน business logic และคืน object หรือ ResponseEntitypostHandle, จากนั้นค่าที่ return จะถูก serialize โดย HttpMessageConverter (JSON ผ่าน Jackson) หรือ view ถูก render โดย ViewResolverafterCompletion ทำงานหลังจาก response ถูก commit; @ExceptionHandler/@ControllerAdvice จัดการข้อยกเว้นตลอดทาง// 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 = ลัดวงจร
}
}
// 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. serialize เป็น JSON
}
}
lifecycle ของ Spring มีชั้นส่วนขยายที่แตกต่างกันสองชั้นที่ผู้สัมภาษณ์ชอบถาม: Filters (ระดับ servlet, ชั้นนอกสุด — ที่ที่ Spring Security อยู่) และ Interceptors (ระดับ Spring MVC, รอบๆ controller) การรู้ลำดับ — filters, DispatcherServlet, mapping, interceptor preHandle, argument binding, controller, message conversion, afterCompletion — บอกคุณว่าจะวาง authentication เทียบกับ logging ไว้ที่ไหน, ทำไม Security filter จึงปฏิเสธ request ก่อนที่ interceptor หรือ controller ใดๆ จะทำงาน, และ @ControllerAdvice รวมศูนย์การจัดการข้อยกเว้นตลอดทั้ง flow อย่างไร
คลังคำถามสัมภาษณ์งาน IT พร้อมคำตอบโดยละเอียด — ตั้งแต่ระดับ Junior ถึง Senior
บริจาค