2011-11-23 34 views
7

Dentro de un método de REST de Jersey me gustaría reenviar a otro sitio web. ¿Cómo puedo lograr eso?Jersey URL reenvío

@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:

estoy recibiendo el error No thread local value in scope for proxy of class $Proxy78 cuando se trata de hacer algo como esto:

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

... 

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

Respuesta

2

no puedo probarlo ahora mismo. Pero ¿por qué no ...

Paso 1. Obtenga acceso a HttpServletResponse. Para hacerlo declarar en su servicio de algo como:

@Context 
HttpServletResponse _currentResponse; 

Paso 2. maquillaje redirigir

... 
_currentResponse.sendRedirect(redirect2Url); 

EDITAR

Bueno, para llamar hacia adelante método que debe llegar a ServletContext. Se puede resolverse de la misma manera como la respuesta:

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

Ahora _context.forward está disponible

+0

Me interesa un delantero, no se lo redirecciono. –

+0

@DorinGrecu solo agregue cómo llegar al contexto – Dewfy

+0

@Derwy Por favor vea mi pregunta editada, no funciona de inmediato. –

3

probar esto, que trabajó para mí:

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

que utiliza el código anterior en mi aplicación y funciona.

+1

Puedes usar Response.temporaryRedirect (location) .build(); vea el ejemplo completo aquí http://www.javaproficiency.com/2015/04/redirect-in-jersey.html –

+0

http://stackoverflow.com/a/25332038/419348 'seeOther' es de algún tipo diferente con' temporaryRedirect '. Uno es '301', y uno es' 302'. – AechoLiu

+1

Esto se redirige no hacia adelante. – Monir