2013-12-20 56 views
6

我是Drop Wizard的新用戶,並且想從服務器端視圖重定向到我應用中的另一個網址。Dropwizard - 如何從視圖做服務器端重定向?

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; 
    } 
} 

回答

14

下面是它實際使用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(); 
} 
+4

使用'javax.ws.rs.core.UriBuilder'並保存7行代碼(無需處理異常),例如'URI uri = UriBuilder.fromPath(「/ publisher/{id}」)。build(publisher.getId());' – Lambart

+0

好點!我已經做出了改變...... –

+1

除了你拿出必要的'Response response = Response.seeOther(uri2).build();'步! :) – Lambart

1

Dropwizard使用的是Jersey 1.x.在Jersey中,您可以拋出WebApplicationException來重定向用戶。

在此還看到了答案:https://stackoverflow.com/a/599131/360594

+0

優秀......這似乎是它...用307(或302把它扔)響應將起作用。 –

+0

對於「重定向」的預期行爲拋出異常是糟糕的設計恕我直言。儘管如此,並沒有出現下調。 –

相關問題