我在新泽西州如何转发API请求时遇到问题

时间:2018-09-24 00:44:04

标签: java api jersey jax-rs

我是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位于同一服务器上。谁能帮我解决这个问题?谢谢

1 个答案:

答案 0 :(得分:0)

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