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