You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:05:16