2011-11-23 15 views
7

All'interno di un metodo REST di Jersey, vorrei inoltrare a un altro sito web. Come posso ottenerlo?Jersey URL forwarding

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

EDIT:

sto ottenendo l'errore No thread local value in scope for proxy of class $Proxy78 quando si cerca di fare qualcosa di simile:

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

... 

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

risposta

2

non posso provarlo subito. Ma perché no ...

Passo 1. Accedere a HttpServletResponse. Per farlo dichiarare in qualcosa di servizio come:

@Context 
HttpServletResponse _currentResponse; 

Fase 2. make reindirizzare

... 
_currentResponse.sendRedirect(redirect2Url); 

EDIT

Beh, per chiamare in avanti il ​​metodo è necessario arrivare a ServletContext. Si può essere risolto allo stesso modo di risposta:

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

Ora _context.forward è disponibile

+0

Sono interessato a un inoltro, non a un reindirizzamento. –

+0

@DorinGrecu è sufficiente aggiungere come accedere al contesto – Dewfy

+0

@Derwy Si prega di consultare la mia domanda modificata, non funziona immediatamente. –

3

Prova questa, ha funzionato per me:

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

ho usato in precedenza codice nel mio applicazione e funziona.

+1

Puoi usare Response.temporaryRedirect (location) .build(); vedere l'esempio completo qui http://www.javaproficiency.com/2015/04/redirect-in-jersey.html –

+0

http://stackoverflow.com/a/25332038/419348 'seeOther' è un tipo diverso con' temporaryRedirect '. Uno è '301', e uno è' 302'. – AechoLiu

+1

Questo è reindirizzamento non in avanti. – Monir