Spring 5迁移:如何替换handleRequestInternal方法及安置逻辑?
Spring 4 到 Spring 5 控制器迁移:原handleRequestInternal逻辑的替代方案
你需要将原AbstractController中的请求处理逻辑迁移到注解驱动的请求处理方法中,具体实现如下:
1. 调整类结构
移除对AbstractController的继承,保留@Controller注解,同时通过注入方式获取所需依赖:
- 原
getApplicationContext()替换为@Autowired注入ApplicationContext webRequestHandler建议通过构造器注入(符合Spring最佳实践)
2. 编写注解式请求处理方法
用@RequestMapping(或更精准的@GetMapping/@PostMapping)标注方法,映射原控制器对应的请求路径,将原handleRequestInternal中的逻辑完整迁移到该方法内。
示例代码
@Controller public class WebRequestViewController { private final ApplicationContext applicationContext; private final WebRequestHandler webRequestHandler; // 构造器注入依赖(推荐方式) public WebRequestViewController(ApplicationContext applicationContext, WebRequestHandler webRequestHandler) { this.applicationContext = applicationContext; this.webRequestHandler = webRequestHandler; } // 替换为原控制器对应的请求路径 @GetMapping("/your-target-path") public ModelAndView handleRequest(HttpServletRequest httpRequest) { try { final WebRequest webRequest = new WebRequest(httpRequest); final SpringPropertyMessageLookup messageLookup = new SpringPropertyMessageLookup( applicationContext, httpRequest.getLocale(), "comp" ); final ModelAndView modelAndView = new ModelAndView(webRequestHandler.getViewName()); webRequestHandler.handleWebRequest(webRequest, modelAndView.getModel(), messageLookup); return modelAndView; } catch (Exception e) { throw new RuntimeException("Exception for [" + webRequestHandler + "]", e); } } }
3. 优化简化(可选)
Spring MVC支持直接注入WebRequest和Locale,可以进一步简化代码:
@GetMapping("/your-target-path") public ModelAndView handleRequest(WebRequest webRequest, Locale locale) { try { final SpringPropertyMessageLookup messageLookup = new SpringPropertyMessageLookup( applicationContext, locale, "comp" ); final ModelAndView modelAndView = new ModelAndView(webRequestHandler.getViewName()); webRequestHandler.handleWebRequest(webRequest, modelAndView.getModel(), messageLookup); return modelAndView; } catch (Exception e) { throw new RuntimeException("Exception for [" + webRequestHandler + "]", e); } }
关键说明
- 替换
@GetMapping中的路径:需匹配原AbstractController配置的请求映射路径 - 依赖注入:优先使用构造器注入替代字段注入,提升代码可测试性和稳定性
- 功能等价性:上述写法完全覆盖原
handleRequestInternal的逻辑,Spring会自动处理请求参数解析、视图渲染等流程
内容的提问来源于stack exchange,提问作者Michu93
相关产品推荐
相关产品推荐

