2013-07-15 2 views
4

Я хочу перенаправить запрос REST на другой сервер.Как перенаправить запрос с помощью JAX-RS?

Я использую JAX-RS с Джерси и Tomcat. Я попробовал это, установив ответ See Other и добавив заголовок Location, но он не настоящий.

Если я использую:

request.getRequestDispatcher(url).forward(request, response); 

я получаю:

  • java.lang.StackOverflowError: Если URL относительный путь
  • java.lang.IllegalArgumentException: Путь http://website.com не начинается с / характера (я думаю, форвард является законным только в том же контексте сервлета).

Как я могу отправить запрос?

+1

Возможно, вам следует отправить перенаправление. 'HttpServletResponse # sendRedirect (String)' –

+0

@SotiriosDelimanolis Но этот метод HttpServletResponse # sendRedirect (String) в основном отправляет HTTP-код ответа 302, с URL-адресом в заголовке LOCATION, который я думаю. Так что это почти то же самое, что и мое решение SEE_OTHER, но это не настоящий прогноз. Или я ошибаюсь? – user2313423

+0

Вы нашли решение для этого, кроме использования перенаправления '302'? При использовании RequestDispatcher.forward, я получаю 'java.lang.ClassCastException: org.glassfish.jersey.message.internal.TracingLogger $ 1 нельзя отнести к org.glassfish.jersey.message.internal.TracingLogger' – tareq

ответ

3

Response API предоставляет два метода для перенаправления:

  • Response.seeOther(URI): Используется в редирект-после-POST (так называемый POST/перенаправление/GET) модель
  • Response.temporaryRedirect(URI): Используется для временного перенаправления

Они могут быть использованы как:

@Path("/endpoint") 
public class MyEndpoint { 

    @POST 
    @Produces("application/json") 
    public Response myMethod() { 

     URI uri = // Create your URI 
     return Response.temporaryRedirect(uri).build(); 
    } 
} 

Вы также можете вводить UriInfo в вашей конечной точки REST:

@Context 
UriInfo uriInfo; 

И получить полезную информацию, такую ​​как base URI и absolute path of the request.

Смежные вопросы