java - 请求正文为空的 PATCH API - AssertionFailedError:预期为 204 但为 415
问题描述
我们的团队正在开发一个 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
解决方案
所以事实证明这是我定义端点的方式 - 这个注释导致了问题:
@RequestBody() final Object updateRequest
完全删除它或将其更改为 String 类型都可以消除错误。
显然我有很多关于 jaxrs 的知识要学:-(
推荐阅读
- javascript - 对异步和承诺的困惑。反应原生
- apache-spark - Spark-shell:当我执行进程时,Web UI 不会改变
- css - 悬停剪辑
- javascript - Javascript:连续 for 循环
- spring-boot - 从部署在 PCF 上的另一个 Java 应用程序调用一个 Java 应用程序
- flutter - 颤动光标轮小部件自动定位动画
- java - Android Studio onCheckedChanged 方法
- swift - SwiftLint 规则在每次扩展之前要求编译标记
- python - 如何使用 Selenium 和 Python 单击值作为下载目录的输入元素
- html - CSS表格布局固定高度问题与间隙