如何使用空实体返回响应状态 405?
Posted
技术标签:
【中文标题】如何使用空实体返回响应状态 405?【英文标题】:how can i return response status 405 with empty entity? 【发布时间】:2013-06-29 23:45:03 【问题描述】:如何在 java REST 中返回带有空实体的响应状态 405?
@POST
@Path("/path")
public Response createNullEntity()
return Response.created(null).status(405).entity(null).build();
返回状态码405,但实体不为空,是405错误的http页面。
【问题讨论】:
【参考方案1】:当您返回错误状态时,Jersey 通过sendError
将响应委托给容器的错误处理。当sendError
被调用时,容器会提供一个错误页面。 Java Servlet Specification §10.9 错误处理中概述了此过程。
我怀疑您看到的是容器的默认错误页面,用于 405 响应。您可能可以通过specifying a custom error page(可能为空)解决您的问题。或者,如果您在回复中提供实体,泽西岛不会使用 sendError
。你可以像这样给它一个空字符串:
@POST
@Path("/path")
public Response createNullEntity()
return Response.status(405).entity("").build();
以上结果为Content-Length
of 0
【讨论】:
感谢您的快速答复。我已经尝试过了,我得到了相同的实体(错误 405 的 http 页面)和内容长度 980。 @junior 你在用 Jersey 吗?什么应用服务器?我用 Tomcat 7.0.39 测试了上述内容。您也可以尝试不同的内容类型:return Response.status(405).entity("").type(MediaType.TEXT_PLAIN).build();
我正在使用 jersey 1.17 和 tomcat 7.0.12。我尝试了不同的内容类型和相同的结果。我尝试了另一种状态,它正在工作,我得到了我想要的结果。
@junior 当您说您尝试使用另一种状态时,您是否调用了相同的方法(/path createNullEntity
的 POST)?也许您收到 actual 405 错误,因为您尝试在该路径上执行 POST 以外的其他操作...您是否验证过您的方法实际上正在被调用?我的例子对我有用,所以除此之外,我没有想法。
我在 tomcat 7.0.39 上试过,它可以工作,在 6.0.35、7.0.12 和 7.0.22 版本上它不起作用。谢谢你的帮助。以上是关于如何使用空实体返回响应状态 405?的主要内容,如果未能解决你的问题,请参考以下文章