一、默認作用域
JavaController是一個基於MVC架構的JavaWeb框架,它的默認作用域是request,這意味着,每一個請求都會創建一個新的JavaController實例,並在該請求處理完成後銷毀。
同時,JavaController支持其他的作用域,如session和singleton,但需要在Controller類上進行標註。
@Controller @SessionScope // 標註該Controller為session作用域 public class UserController { // ... }
二、路由映射
JavaController支持通過@RequestMapping註解進行路由映射,該註解可以作用於類和方法上,使得請求可以被正確地分發到指定的Controller和方法中。
同時,@PathVariable註解也被廣泛應用於JavaController中,可以在路由中包含參數,以便獲得更多的請求信息。
@Controller @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public String getUserById(@PathVariable Long id, Model model) { // ... return "user"; } }
三、模型綁定
JavaController支持將請求的參數自動綁定到Controller方法的參數上,以及支持通過Model對象向View層傳遞數據。
使用@RequestParam註解可以指定請求參數名和請求參數類型,同時支持默認值和必須性校驗。
@Controller @RequestMapping("/users") public class UserController { @PostMapping("/") public String createUser(@RequestParam String username, @RequestParam(required = false, defaultValue = "18") Integer age, Model model) { // ... model.addAttribute("user", newUser); return "userCreated"; } }
四、攔截器
JavaController支持攔截器,通過實現HandlerInterceptor接口可以實現在請求前、請求後和之後的視圖渲染過程中執行特定的邏輯。
攔截器可以實現權限控制、日誌記錄等通用的邏輯,同時也非常適合對請求進行性能監控和統計。
public class LoggingInterceptor implements HandlerInterceptor { private static final Logger LOGGER = LoggerFactory.getLogger(LoggingInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { LOGGER.info("Received a request: {}, {}", request.getMethod(), request.getRequestURI()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { // ... } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { // ... } }
五、異常處理
JavaController支持通過@ControllerAdvice註解的異常處理器來處理Controller中拋出的異常,同時也非常適合集中處理通用異常、進行日誌記錄等操作。
可以通過@ExceptionHandler註解指定處理特定異常類型的邏輯。
@ControllerAdvice public class GlobalExceptionHandler { private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class); @ExceptionHandler(BusinessException.class) public ResponseEntity handleBusinessException(HttpServletRequest request, BusinessException ex) { ResultModel result = new ResultModel(ResultStatus.FAILURE); result.setMessage(ex.getMessage()); LOGGER.error("Failed to handle the request: {}", request.getRequestURI(), ex); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result); } @ExceptionHandler(Exception.class) public ResponseEntity handleUnexpectedException(HttpServletRequest request, Exception ex) { ResultModel result = new ResultModel(ResultStatus.FAILURE); LOGGER.error("Failed to handle the request: {}", request.getRequestURI(), ex); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result); } }
原創文章,作者:SOBB,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144176.html