Spring MVC批注始终需要Response对象

问题描述

| 我正在尝试将控制器从旧的继承框架转换为新的注释。 这是一个现有的控制器:
public class SelectedTabController extends AbstractController {

private TabSelectionHelper tabSelectionHelper;

public ModelAndView handleRequestInternal(HttpServletRequest request,HttpServletResponse response) throws Exception {
    String param = request.getParameter(\"selectedTab\");
    if (param != null)
        tabSelectionHelper.setSelectedTabTo(param);
    return null;
}

public void setTabSelectionHelper(TabSelectionHelper tabSelectionHelper) {
    this.tabSelectionHelper = tabSelectionHelper;
}
转换后,我有这个:
@Controller
public class SelectedTabController {

    private TabSelectionHelper tabSelectionHelper;

    @Autowired
    public SelectedTabController(@Qualifier(value = \"tabSelectionHelper\") TabSelectionHelper tabSelectionHelper) {
        this.tabSelectionHelper = tabSelectionHelper;
    }

    @RequestMapping(\"/selectedTab\")
    public void selectTab(String selectedTab,HttpServletResponse response) throws Exception {
        //String param = request.getParameter(\"selectedTab\");
        if (selectedTab != null)
            tabSelectionHelper.setSelectedTabTo(selectedTab);
    }
}
方法有效,但是selectTab参数列表中有一个(冗余)HttpServletResponse对象。如果删除它,则JQuery调用会说服务器返回500,并且调用失败。 有什么帮助吗? stacktrace显示
javax.servlet.servletexception: Could not resolve view with name \'selectedTab\' in servlet with name \'prodman\'
因此,它正在尝试查找视图并失败。但是,没有视图显示为JQuery的后端调用。 我想通过声明响应对象,Spring认为我将编写响应。 如何防止Spring尝试解析视图?     

解决方法

        当您使用void作为返回类型时,Spring会默认尝试从您的方法名称中确定视图名称,除非它认为您正在直接编写响应(当您将HttpServletResponse作为参数时会执行此操作)。看看Spring 3文档的15.3.2.3节。 您可能想尝试将返回类型更改为ModelAndView并返回null并查看会发生什么情况(我不确定您是否可以使用@RequestMapping放弃null视图,因为这不是我尝试过的事情)