2011-11-23 30 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