2011-11-23 18 views
7

Wewnątrz metody REST na Jersey Chciałbym przesłać do innej strony internetowej. Jak mogę to osiągnąć?Adresowanie przekierowań na koszulki

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

Dostaję błąd No thread local value in scope for proxy of class $Proxy78 gdy próbuje zrobić coś takiego:

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

... 

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

Odpowiedz

2

nie mogę przetestować go teraz. Ale dlaczego nie ...

Krok 1. Uzyskaj dostęp do HttpServletResponse. Aby zrobić to zadeklarować w czymś usług takich jak:

@Context 
HttpServletResponse _currentResponse; 

Krok 2. make przekierować

... 
_currentResponse.sendRedirect(redirect2Url); 

EDIT

Dobrze, aby zadzwonić do przodu metodę trzeba dostać się do ServletContext. Jest może być rozwiązany w ten sam sposób jak odpowiedzi:

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

Teraz _context.forward jest dostępny

+0

Interesuje mnie forward, a nie przekierowanie. –

+0

@DorinGrecu wystarczy dodać, jak dostać się do kontekstu – Dewfy

+0

@Derwy Proszę zobaczyć moje edytowane pytanie, to nie działa od razu. –

3

Spróbuj tego, że pracował dla mnie:

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

użyłem powyżej kodu w moim aplikacja i działa.

+1

Możesz użyć Response.temporaryRedirect (location) .build(); zobacz pełny przykład tutaj http://www.javaproficiency.com/2015/04/redirect-in-jersey.html –

+0

http://stackoverflow.com/a/25332038/419348 'seeOther' jest czymś innym z' temporaryRedirect '. Jeden to '301', a drugi to' 302'. – AechoLiu

+1

To jest przekierowanie, a nie naprzód. – Monir