0

我正在将 Java EE 代码转换为 Spring MVC。

原始应用程序有一些代码,可能会返回重定向 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 表达相同的逻辑?

4

2 回答 2

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 允许控制器接受和返回不同类型的对象,因此请选择最适合您的签名。无论您做什么,都不鼓励使用容器特定的 API 并在控制器方法中创建原始响应 (HTML),因为它模糊了 MVC 中视图和控制器之间的关注点分离。

更新 2: 1. 您可以很好地使用外部(绝对)url 和RedirectView. 2.RedirectView负责设置响应状态和Location标头。3. 如果您想在响应中设置 cookie,请使用标准 Java EE API -HttpServletResponse作为控制器方法的参数,以及您想要添加的任何 cookie,直接向其中添加。

于 2013-08-06T11:36:59.657 回答
0

如果您的控制器的返回类型是ModelAndView,请包装 aRedirectView以进行重定向。

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

如果您的控制器的返回类型是String,请附加"redirect:"到您要重定向的 url。

 if (doRedirect)
    return "redirect:" + authUrl;
 else
    return url;
于 2013-08-06T11:51:32.623 回答