2016-05-25 19 views
1

我想使用post/redirect/get模式來轉換post請求,以防止「爲HTTP路徑映射的模糊處理程序方法」錯誤。詳情請參閱This questiontransform使用java中的Post-Redirect-Get模式發送請求彈出

這裏是最初的代碼:

@Controller 
@RequestMapping("/bus/topologie") 
public class TopologieController { 
    private static final String VIEW_TOPOLOGIE = "topologie"; 

    @RequestMapping(method = RequestMethod.POST, params = { "genererCle" }) 
    public String genererCle(final Topologie topologie, final Model model) 
     throws IOException { 
     cadreService.genererCle(topologie); 
     return VIEW_TOPOLOGIE; 
    } 

我真的不知道如何使用PRG模式,重新編碼它。即使我認爲我理解底層概念。

回答

4

您需要添加另一個方法,該方法可以處理同一個url映射的GET請求。 因此,在您的POST方法中,您只需進行重定向,並在GET方法中執行所有業務流程。

@Controller 
@RequestMapping("/bus/topologie") 
public class TopologieController { 
    private static final String VIEW_TOPOLOGIE = "topologie"; 

    @RequestMapping(method = RequestMethod.POST, params = { "genererCle" }) 
    public String genererClePost(final Topologie topologie, final RedirectAttributes redirectAttributes, @RequestParam("genererCle") final String genererCle, final Model model) 
     throws IOException { 
     redirectAttributes.addAttribute("genererCle", genererCle); 
     return "redirect:/bus/topologie"; 
    } 

    @RequestMapping(method = RequestMethod.GET, params = { "genererCle" }) 
    public String genererCleGet(final Topologie topologie, final Model model) 
     throws IOException { 
     cadreService.genererCle(topologie); 
     return VIEW_TOPOLOGIE; 
    } 
+0

這幾乎是我以前所做的,但我有一個錯誤:「類型爲TopologieController的重複方法genererCle(Topologie,Model)」。 – jayjaypg22

+0

@ jayjaypg22:是的,你是對的。我編輯了我的答案,並通過爲每個匹配支持的請求方法的方法添加後綴來更改方法名稱。這樣它應該工作。 – perbellinio

+0

調試時,使用此代碼進入POST請求並重定向到表單,但不會輸入GET方法。 – jayjaypg22