У меня проблема с тем, как перенаправить запрос API в Джерси - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в REST API.Я хочу перенаправить запрос в другую конечную точку API, когда пользователь вызывает один API.Я пытаюсь реализовать его с помощью следующего кода, но он не работает.

@Path("/API/v1/NEW/keys")

public class KmsAuditing {

private Client client = ClientBuilder.newClient();

@GET

@Produces(MediaType.APPLICATION_JSON)

  public Response getResult() {

    WebTarget MyResponse = client.target("/API/v1/keys");

   return  Response.ok(MyResponse).build();

}
@PreDestroy

public void destroy(){

this.client.close();
   }
}

, когда я вызываю "/ API / v1 / NEW / keys", этот запрос будет перенаправлен на "/ API / v1 /ключи».И эти два API на одном сервере.Может ли кто-нибудь помочь мне понять это?Спасибо

1 Ответ

0 голосов
/ 24 сентября 2018

Даже если конечная точка находится на том же сервере, клиент по-прежнему ожидает полный URL.Если вы не хотите использовать статический URL-адрес, вы можете получить базовый путь из UriInfo, который вы можете вставить в метод ресурса.

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getResult(@Context UriInfo uriInfo) {
   // you might need to play around with this. I'm not sure exactly
   // the base will be. Do some debugging if needed.
   URI uri = uriInfo.getBaseUriBuilder()
           .path("/API/v1/keys")
           .build();
   WebTarget target = client.target(uri);
   Response response = target.request().get();
   ...
}

Также обратите внимание, что вы не можете просто вернутьResponse.Вы должны получить любой ответ это.Самый общий способ сделать это - прочитать его как InputStream и просто вернуть его.Но вы также должны проверить состояние запроса клиента, чтобы убедиться, что он был успешным.Может быть, что-то вроде

if (response.getStatus() == 200) {
    return Response.ok(response.readEntity(InputStream.class)).build();
} else {
    return Response.serverError().build();
}
...