使用 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 错误?