gpt4 book ai didi

java - DropWizard/Jersey API 客户端

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:46 24 4
gpt4 key购买 nike

DropWizard使用 Jersey在 REST 的底层。我正在尝试弄清楚如何为我的 DropWizard 应用程序将公开的 RESTful 端点编写客户端。

为了这个例子,假设我的 DropWizard 应用程序有一个 CarResource,它公开了一些用于 CRUD 汽车的简单 RESTful 端点:

@Path("/cars")
public class CarResource extends Resource {
// CRUDs car instances to some database (DAO).
public CardDao carDao = new CarDao();

@POST
public Car createCar(String make, String model, String rgbColor) {
Car car = new Car(make, model, rgbColor);
carDao.saveCar(car);

return car;
}

@GET
@Path("/make/{make}")
public List<Car> getCarsByMake(String make) {
List<Car> cars = carDao.getCarsByMake(make);
return cars;
}
}

所以我会想象结构化的 API 客户端类似于 CarServiceClient:

// Packaged up in a JAR library. Can be used by any Java executable to hit the Car Service
// endpoints.
public class CarServiceClient {
public HttpClient httpClient;

public Car createCar(String make, String model, String rgbColor) {
// Use 'httpClient' to make an HTTP POST to the /cars endpoint.
// Needs to deserialize JSON returned from server into a `Car` instance.
// But also needs to handle if the server threw a `WebApplicationException` or
// returned a NULL.
}

public List<Car> getCarsByMake(String make) {
// Use 'httpClient' to make an HTTP GET to the /cars/make/{make} endpoint.
// Needs to deserialize JSON returned from server into a list of `Car` instances.
// But also needs to handle if the server threw a `WebApplicationException` or
// returned a NULL.
}
}

但我能找到的仅有的两个关于 Drop Wizard 客户端的官方引用完全相互矛盾:

  • DropWizard recommended project structure - 它声称我应该将我的客户端代码放在 car.service.client 包下的 car-client 项目中;但是然后……
  • DropWizard Client manual - 这让它看起来像是一个“DropWizard 客户端”,用于将我的 DropWizard 应用程序与其他 RESTful 网络服务集成(因此充当中间人)。

所以我问,为您的 DropWizard Web 服务编写 Java API 客户端的标准方法是什么? DropWizard 是否有我可以用于此类用例的客户端库?我应该通过一些 Jersey 客户端 API 来实现客户端吗?有人可以向我的 CarServiceClient 添加伪代码,以便我了解它是如何工作的吗?

最佳答案

这是您可以通过 JAX-RS 客户端使用的模式。

获取客户:

javax.ws.rs.client.Client init(JerseyClientConfiguration config, Environment environment) {
return new JerseyClientBuilder(environment).using(config).build("my-client");
}

然后您可以通过以下方式调用电话:

javax.ws.rs.core.Response post = client
.target("http://...")
.request(MediaType.APPLICATION_JSON)
.header("key", value)
.accept(MediaType.APPLICATION_JSON)
.post(Entity.json(myObj));

关于java - DropWizard/Jersey API 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26621838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com