【问题标题】:PATCH API with empty request body - AssertionFailedError: expected 204 but was 415请求正文为空的 PATCH API - AssertionFailedError:预期为 204 但为 415
【发布时间】:2021-10-11 22:24:05
【问题描述】:

我们的团队正在开发一个 API,该 API 具有一个 PATCH 端点,该端点具有一个空响应和一个空请求正文 - 必要的信息包含在路径参数中。不是我做的,只是想让测试运行。

当我尝试对其进行测试时,我得到了 415 响应,而不是预期的 204。这是我的测试主体:

WebTarget webTarget = ClientBuilder.newClient().target(baseUrl).path(path);
// have also tried this:
// WebTarget webTarget = ClientBuilder.newClient().register(new JacksonJsonProvider()).target(baseUrl).path(path);

webTarget.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);

Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON);

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

try {
  final Response response = invocationBuilder.method("PATCH", Entity.json(objectMapper.writeValueAsString(new Object())));

  assertEquals(204, response.getStatus(), "should return 204 empty response");
} catch (JsonProcessingException ex) {
  fail();
}

有趣的是,以下两行本身也返回 415 状态:

Invocation.Builder invocationBuilder webTarget.request(MediaType.APPLICATION_JSON);
Response response = invocationBuilder.method("PATCH");

我在控制台中看到以下错误:

ERROR org.apache.cxf.jaxrs.utils.JAXRSUtils - No message body reader has been found for class java.lang.Object, ContentType: application/json

【问题讨论】:

    标签: java junit jackson jax-rs


    【解决方案1】:

    原来这是我定义端点的方式——这个注释导致了问题:

    @RequestBody() final Object updateRequest
    

    无论是完全删除它还是将其更改为 String 类型都可以消除错误。

    显然我有很多关于 jaxrs 的知识:-(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2019-04-12
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多