2013-08-06 74 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和标题? –