2017-02-26 173 views
0

轉發請求從servlet,我將請求轉發到一個彈簧控制器像下面到彈簧控制器

RequestDispatcher rd = request.getRequestDispatcher("/myController/test?reqParam=value"); 
rd.forward(request, response); 

爲了將參數傳遞給所述彈簧控制器,我將它作爲請求的參數的轉發網址。

有沒有更好的方法來做到這一點?

而不是傳遞請求參數,我可以作爲方法參數傳遞給彈簧控制器在正向?

+1

[Spring forward with added parameters?](http:// stackoverflow .com/questions/8585216/spring-forward-with-added-parameters) – bphilipnyc

+0

我可以問 - 你是否需要從純Java servlet進行調用?那就是,爲什麼不是控制器? – bphilipnyc

+0

我已經在一個servlet的上下文中(我不能在這個servlet中更改很多代碼)。我需要將請求轉發給控制器,在發送回瀏覽器之前,我可以豐富響應 – lives

回答

1

在請求/myController/test?reqParam=value將其稱爲:

@RequestMapping("/myController/test") 
public String myMethod(@RequestParam("reqParam") String reqParamValue) { 
    return "forward:/someOtherUrl?reqParam="+reqParamValue; //forward request to another controller with the param and value 
} 

或者你可以這樣做:

@RequestMapping("/myController/test") 
public String myMethod(@RequestParam("reqParam") String reqParamValue, 
         HttpServletRequest request) { 
    request.setAttribute("reqParam", reqParamValue); 
    return "forward:/someOtherUrl"; 
} 
+0

OP是從一個servlet調用,而不是另一個彈簧控制器。在這種情況下,我認爲你不能使用''前進:....「技巧? –

+0

嗯,好的。我不清楚它必須來自一個servlet,或者這是OP如何去做的。 – bphilipnyc

+0

謝謝。會試試這個。 – lives

1

您可以使用路徑變量,如跟隨,而不需要使用查詢字符串參數:

@RequestMapping(value="/mapping/parameter/{reqParam}", method=RequestMethod.GET) 
public @ResponseBody String byParameter(@PathVariable String reqParam) { 
    //Perform logic with reqParam 
} 
+0

謝謝。將嘗試這個 – lives