java - 如何将自定义内容类型设置为 jax-rs 客户端?

标签 java json jax-rs content-type

我正在运行一些这样声明的 JAX-RS 资源:

public interface MyEntityServiceV2 {
    @PUT
    @Consumes({"application/myentity-v2+json"})
    @Produces({"application/myentity-v2+json"})
    @Path("/{uuid:[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}}")
    Response putMyEntity(@PathParam("uuid") String uuid, MyEntityDto myEntity);
}

现在我想使用 Jersey-Client(或任何其他客户端,如果它有助于解决我的问题)测试它们:

MyEntityDto dto = new MyEntityDto();
Entity<MyEntityDto> entity = Entity.entity(dto, MediaType.APPLICATION_JSON_TYPE);

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:7001/path/" + UUID.randomUUID().toString());
Invocation.Builder builder = target.request("application/myentity-v2+json");
builder.header("Content-Type", "application/myentity-v2+json");
Response response = builder.put(entity);

不幸的是,这不起作用。该请求始终包含 application/json 的内容类型。而且这与服务器上的接口(interface)不匹配。

作为替代方案,我可以使用我的自定义 MediaType 创建实体,这也会导致错误,因为它找不到该类型的 MessageBodyWriter。

哦,我无法更改服务声明。

您认为测试此资源的最佳方法是什么?

最佳答案

使用您的自定义 MediaType 创建一个实体,然后向您的客户端注册一个自定义 MessageBodyWriter。它可以像扩展现有的 MessageBodyWrite 一样简单,以便在调用 isWritable 时返回 true,或者您可能必须实现 writeTo 方法。

关于java - 如何将自定义内容类型设置为 jax-rs 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39965925/

相关文章:

java - 如何在 Android 中发送短信?

java - 如何使用 BigDecimal 递增 for 循环?

javascript - 将多个对象传递给 angularjs $resource.save()

java - JAXB - @XMLTransient 字段在返回到 UI 时消失

java - JSpinner 具有显示格式、仅数字和手动编辑

c# - 有人可以指点我从 C# 到 Java 的良好迁移指南吗?

python - 在 python 中打开一个 JSON 文件

mysql - 如何(增删改查)在 mysql 5.7 json 列上插入选择更新删除

java - 如何使用 JAX-RS 捕获所有无效 URL?

java - 如何从同一主机/端口下的多个Camel上下文获取JAX-RS端点?