2013-08-06 118 views
0

我正在將Java EE代碼轉換爲Spring MVC。Spring MVC - HTML或重定向

原始應用程序有一些代碼,可能會返回重定向HTTP代碼或常規響應。

if (doRedirect) 
     return Response.status(Response.Status.TEMPORARY_REDIRECT).cookie(cookie).location(new URI(authUrl)).entity("Redirecting...").build(); 
    else 
     return Response.status(Status.OK).entity(authUrl).cookie(cookie).build(); 

如何使用Spring MVC表達相同的邏輯?

回答

1

我不知道你正在使用,從來沒有見過這樣的代碼

Response.status(Response.Status.TEMPORARY_REDIRECT).cookie(cookie).location(new URI(authUrl)).entity("Redirecting...").build(); 

所以我會認爲這從一些自定義/專有框架項目使用什麼框架。

更新:從評論我明白這是澤西島的代碼。謝謝。絕對是我要看的東西! :)

儘管如此,Spring MVC應用程序仍然是一個Java EE應用程序。如果您的控制器方法邏輯規定響應將是客戶端重定向或html,則可以執行以下操作。

  1. 有你的控制器方法ModelAndView對象。
  2. 根據你的邏輯,如果你決定該方法應該發出重定向,創建一個RedirectView的實例,傳遞應該發生重定向的URI。
  3. RedirectView實例設置爲ModelAndView的實例,並將其從該方法返回。這將導致客戶端瀏覽器的重定向。
  4. 如果您的邏輯規定應該提供HTML響應,請將路徑傳遞給您的jsp到ModelAndView實例並返回它。

現在希望它更清晰。

基本上,Spring MVC允許控制器接受和返回不同類型的對象,所以選擇最適合您的簽名。無論您做什麼,都不鼓勵使用Container特定的API並在控制器方法中創建原始響應(HTML),因爲它會模糊MVC中視圖和控制器之間的關注點分離。

更新2: 1.你可以很好地使用外部(絕對)網址RedirectView。 2. RedirectView負責設置響應狀態和Location標題。 3.如果您想在響應中設置cookie,請使用標準Java EE API - HttpServletResponse作爲控制器方法的參數,以及任何要直接添加到其中的cookie。

+0

這是澤西島代碼。 –

+0

我應該使我的控制器方法無效,只是操縱響應? –

+0

即時更新我的​​迴應,更具體的東西..和更簡單的解決方案。 – Akshay

0

如果您的控制器的返回類型爲ModelAndView,請包裝RedirectView進行重定向。

if (doRedirect) 
    return new ModelAndView(new RedirectView(authUrl)); 
else 
    return new ModelAndView(url); 

如果控制器的返回類型爲String,追加"redirect:"到要重定向的URL。

if (doRedirect) 
    return "redirect:" + authUrl; 
else 
    return url; 
+1

謝謝,但是如何使用這種方法設置cookie和標題? –