为什么我不能从Spring MVC控制器方法重定向到另一个控制器方法?

4ngedf3f  于 5个月前  发布在  Spring
关注(0)|答案(2)|浏览(47)

我是Spring MVC的新手,在尝试重定向到一个控制器方法时遇到了一些问题,因为另一个控制器方法终止了它的执行。
所以我有以下情况。进入一个控制器类,我有这个方法,正确处理对validaProgetti资源的POST请求:

@RequestMapping(value = "validaProgetti", method=RequestMethod.POST)
public @ResponseBody String validaProgetti(@RequestBody List<Integer> checkedRowList) {
            
    System.out.println("ID progetti da aggiornare: " + checkedRowList);
    
    List<Twp1007Progetto> progettiDaValidare =  new ArrayList<Twp1007Progetto>(); 
    
    for (int i=0; i<checkedRowList.size(); i++) {
        System.out.println("ID PROGETTO: " + checkedRowList.get(i));
        progettiDaValidare.add(progettoService.getProgetto(checkedRowList.get(i)));
    }
    
    
    progettoService.validaProgetti(progettiDaValidare);
    
    return "redirect:ricercaValidazione";
}

字符串
所以这个方法被正确Map,当validaProgetti资源被调用时,它被执行。
在这个方法的最后,我没有返回一个呈现JSP页面的视图名称,而是必须重定向到另一个方法(执行一些操作并呈现JSP页面)。因此,为了返回一个视图名称,我重定向到另一个资源:

return "redirect:ricercaValidazione";


然后在同一个控制器类中,我声明了这个方法,它处理对这个ricercaValidazione资源的请求:

@RequestMapping(value = "ricercaValidazione", method=RequestMethod.POST)
public String ricercaValidazione(@ModelAttribute ConsultazioneFilter consultazioneFilter, Model model, HttpServletRequest request) {
    
    RicercaConsultazioneViewObject filtro = null;
    try {
        filtro = new ObjectMapper().readValue(request.getParameter("filtro"), RicercaConsultazioneViewObject.class);
        filtro.setSelStatoProgetto(3);      // Progetti da validare
    } catch (IOException e) {
        logger.error(e);
    }

    consultazioneFilter = new ConsultazioneFilter(filtro);
    model.addAttribute("consultazioneFilter", consultazioneFilter);
    
    model.addAttribute("listaProgetti", new ListViewObject<Twp1007Progetto>(progettoService.getListaProgettiConsultazione(consultazioneFilter)) );
    
    return "validazione/tabellaRisultati";
}


问题是它不能工作,重定向后不能进入ricercaValidazione()方法。
我想问题可能是这个
ricercaValidazione()方法处理POST
请求到ricercaValidazione资源和返回“redirect:ricercaValidazione”;可能生成一个GET请求。
但我不确定。
为什么?我错过了什么?我如何解决这个问题?

isr3a4wc

isr3a4wc1#

使用重定向给控制器的给予Map名称,如

redirect:/controll-mapping_name/ricercaValidazione

字符串
看一下这个问题
Unable to redirect from one controller to another controller-Spring MVC

mbzjlibv

mbzjlibv2#

redirect和fordward前缀用于解析视图;您正在特灵从一个控制器重定向到另一个控制器。
1.将响应发送到浏览器,其中包含重定向HTTP状态代码和URL
1.浏览器通过GET加载请求URL
1.如果Spring控制器(以及相应的amping方法)与注解参数匹配,则会调用它
从你写的内容来看,我不确定这是你真正想要的;正如你已经注意到的,HTTP方法(GET与POST)之间存在不匹配。
您的第二个方法ricercaValidazione需要一个filtro参数来过滤一些数据,但在validaProgetti中没有类似的东西,所以看起来这两个控制器是不能直接链接的。如果您想要在validaProgetti之后显示一个页面,显示一个表单,用户可以提交它,您必须添加一个方法,用GET方法和url ricercaValidazione 注解; new方法必须返回包含表单的视图;该视图通过POST指向validaProgetti的url。这样您就可以从ricercaValidazione重定向到validaProgetti

相关问题