【问题标题】:Dropwizard - how to do a server side redirect from a view?Dropwizard - 如何从视图进行服务器端重定向?
【发布时间】:2014-01-09 15:44:36
【问题描述】:

我是 Drop Wizard 的新手,想从服务器端视图重定向到我的应用程序中的另一个 url。

DropWizard 是否以某种方式完成了这项常见任务?

例如

@GET
public View getView(@Context HttpServletRequest req)
{
     View view = new View();

     if (somethingBad)
     {
         // code here to redirect to another url, eg /bad_data
     }
     else
     {
          return view;
     }
}

【问题讨论】:

    标签: java view dropwizard


    【解决方案1】:

    这是一个简单的代码示例,它实际上使用 WebApplicationException 进行重定向。所以你可以把它放在你的视图中,或者你的资源中,然后随时扔掉。

    URI uri2 = UriBuilder.fromUri(url).build();
    Response response = Response.seeOther(uri2).build();
    throw new WebApplicationException(response);
    

    您也可以让您的资源返回视图或重定向响应:

    @GET
    public Object getView(@Context HttpServletRequest req)
    {
         if (somethingBad())
         {
             URI uri = UriBuilder.fromUri("/somewhere_else").build();
             return Response.seeOther(uri).build();
         }
    
         return new View();
    }
    

    【讨论】:

    • 使用javax.ws.rs.core.UriBuilder并节省7行代码(无需处理异常),例如URI uri = UriBuilder.fromPath("/publisher/{id}").build(publisher.getId());
    • 除非你拿出了必不可少的Response response = Response.seeOther(uri2).build();一步! :)
    • 请注意,如果您使用的是 Dropwizard Hibernate - 抛出异常将导致您的事务回滚。
    【解决方案2】:

    Dropwizard 正在使用 Jersey 1.x。在 Jersey 中,您可以抛出 WebApplicationException 来重定向用户。

    也可以在这里查看答案:https://stackoverflow.com/a/599131/360594

    【讨论】:

    • 优秀...似乎是它...用 307(或 302)响应将其扔掉。
    • 为预期的“重定向”行为抛出异常恕我直言是糟糕的设计。不过,不要投反对票。
    猜你喜欢
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多