2011-11-23 66 views
7

在Jersey REST方法中,我想轉發到另一個網站。我怎樣才能做到這一點?Jersey URL轉發

@Path("/") 
public class News { 

    @GET 
    @Produces(MediaType.TEXT_HTML) 
    @Path("go/{news_id}") 
    public String getForwardNews(
     @PathParam("news_id") String id) throws Exception { 

     //how can I make here a forward to "http://somesite.com/news/id" (not redirect)? 

     return ""; 
    } 
} 

編輯:

試圖做這樣的事情的時候,我發現了No thread local value in scope for proxy of class $Proxy78錯誤:

@Context 
HttpServletRequest request; 
@Context 
HttpServletResponse response; 
@Context 
ServletContext context; 

... 

RequestDispatcher dispatcher = context.getRequestDispatcher("url"); 
dispatcher.forward(request, response); 

回答

2

我現在不能測試它。但爲什麼不...

第1步。獲得訪問HttpServletResponse。要做到這一點在你的服務類似聲明:

@Context 
HttpServletResponse _currentResponse; 

第2步:重定向

... 
_currentResponse.sendRedirect(redirect2Url); 

編輯

好吧,呼叫前轉,你需要得到ServletContext的方法。它可以解決同樣的方式迴應:

@javax.ws.rs.core.Context 
ServletContext _context; 

現在_context.forward

+0

我對轉發感興趣,而不是重定向。 –

+0

@DorinGrecu只是添加如何去上下文 – Dewfy

+0

@Derwy請看我編輯的問題,它不會馬上工作。 –

3

試試這個,它的工作對我來說:

public String getForwardNews(

@Context final HttpServletRequest request, 

@Context final HttpServletResponse response) throws Exception 

{ 

System.out.println("CMSredirecting... "); 

response.sendRedirect("YourUrlSite"); 

return ""; 

} 
8
public Response foo() 
{ 
    URI uri = UriBuilder.fromUri(<ur url>).build(); 
    return Response.seeOther(uri).build(); 
} 

我用上面的代碼我應用程序和它的作品。

+1

你可以使用Response.temporaryRedirect(location).build();看到完整的例子在這裏http://www.javaproficiency.com/2015/04/redirect-in-jersey.html –

+0

http://stackoverflow.com/a/25332038/419348 'seeOther'是一種不同於'temporaryRedirect '。一個是'301',一個是'302'。 – AechoLiu

+1

這是重定向不轉發。 – Monir