我对如何在 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();
}
我是 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();
}