我对如何在 Jersey 中转发 API 请求有疑问

I have a problem with how to forward API request in Jersey

我是 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/keys”。而且这两个 API 在同一台服务器上。谁能帮我解决这个问题?谢谢

即使端点在同一台服务器上,客户端仍然期望 完整 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();
   ...
}

另请注意,您不能只 return Response。你需要得到任何回应。执行此操作的最通用方法是将其读作 InputStream 并且只是 return。但是您还应该检查客户端请求的状态以确保它是一个成功的请求。也许像

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