使用 Jax-RS 发布 HTTP 错误代码 415?

Posted

技术标签:

【中文标题】使用 Jax-RS 发布 HTTP 错误代码 415?【英文标题】:POST with Jax-RS giving HTTP error code 415? 【发布时间】:2021-04-14 01:20:40 【问题描述】:

我有以下使用jax-rs 框架的POST 端点:

    @POST
    @NoCache
    @Path("/client/email/template/type/type")
    public void sendEmail(
    @PathParam("client") String client,
    @PathParam("type") String communicationTemplateType) 
        emailService.sendEmail(client, communicationTemplateType);
    

每当我点击此端点时,我都会收到以下错误,错误代码为415

JBWEB000135: The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.

我的端点有什么问题?

【问题讨论】:

资源上是否有任何其他注释(即在类级别)?您的 POST 请求发送哪些标头? 1.提示:始终使用@Consumes@Produces 注释。 2.您是否尝试在正文中发送实体?如果是这样,您必须有一个参数来支持该实体。 3. 确保使用正确的 Content-Type 标头...应该处理所有这三件事。 还可以显示您是如何发送请求的? 你解决了我在之前评论中提到的所有问题吗?添加赏金而不使用 cmets 的请求更新您的帖子是没有意义的。那时没有人能回答你的问题,他们也无法回答,因为你添加了赏金。只是浪费你的网点。如需更好的帮助,请阅读我以前的 cmets 并更新您的帖子。 【参考方案1】:

如https://docs.oracle.com/cd/E19798-01/821-1841/6nmq2cp22/index.html内部报道:

如果资源无法使用客户端请求的 MIME 类型, JAX-RS 运行时发回 HTTP 415(“不支持的媒体类型”) 错误。

您是否尝试添加 @Consumes 符号来指定接受的媒体类型?

【讨论】:

【参考方案2】:

您传递了 URL 中的所有参数。尝试切换到 GET 而不是 POST。

【讨论】:

【参考方案3】:

虽然带有空主体的 POST 端点并不少见,但以下响应让我有些犹豫:

JBWEB000135:服务器拒绝了这个请求,因为请求 实体的格式不受请求的资源支持 请求的方法。

您能否验证客户端并确保其未在其请求正文中发送任何数据。还要验证您的客户端是否发送了任何 Content-Type Header。

如果您不确定客户端是否在静默添加任何正文/标题,您可以使用 Postman 来模拟这一点。或者一个简单的卷曲就足够了。

【讨论】:

【参考方案4】:

调试连接请求并检查 MIME 类型标头。 如果您的客户端发布请求并声明您不支持的 MIME 类型,那么您需要更改请求或调整您的服务器 REST 服务以支持该 MIME 类型。

例如, 如果您使用浏览器作为客户端执行 REST POST 调用,您可以在运行 POST 调用之前单击 F12 (fire fox/chrome),然后执行该操作,您将看到执行的所有 REST 调用.

单击您感兴趣的呼叫,然后检查标题。 如果您缺少某些内容类型,您可以在您的服务中为其添加注释。

例如: 我第一次打开F12然后 我使用此站点运行 POST 调用: https://reqbin.com/

然后在 F12 窗口中(在我的例子中是 firefox):

【讨论】:

以上是关于使用 Jax-RS 发布 HTTP 错误代码 415?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JAX-RS/RESTEasy 实现 CORS 的 Ajax 请求

通过 JAX-RS 客户端支持 HTTP/1.1 和 HTTP/2

如何使用 JAX-RS 异常上的自定义消息设置 40X 错误?

如何在 Tomcat 上的 JAX-RS (Jersey) 中返回 HTTP 404 JSON/XML 响应?

在 JAX-RS 2.0 客户端库中处理自定义错误响应

JAX-RS (Jersey 2) - 使用 JSR 250 注释的授权