当没有路径时,泽西REST 404错误

时间:2013-03-11 19:20:14

标签: rest jersey

我已经开发了一组RESTful网络服务,我正试图以有用的方式为用户处理错误。

我遇到了一个错误编码帐户资源的URL的情况,并且遇到了404错误。我预计会出现错误,因为服务器中没有响应的@Path注释。但是自从我收到404后,我向用户报告说他们没有找到他们的帐号。

我想从纯粹的RESTful观点来看,404“有意义”,因为/ server / foo / 123450没有“资源”(当资源的正确路径为/ server / bar / 123450时)。但/ server / thisPathHasNoHopeOfExisting / 123450也响应404。

帐号00000不存在的

/ server / bar / 000000响应404。

如何告诉我的用户正确的事情? (/ server / thisPathHasNoHopeOfExisting / xxxxxx是一个真正的服务器错误,一个500系列,因为服务器永远不会回答这个问题) - 有没有办法让我的泽西服务有点少休息 - 迂腐?

1 个答案:

答案 0 :(得分:0)

How can I tell my user the right thing?

404 是正确的。

(that /server/thisPathHasNoHopeOfExisting/xxxxxx is a true server error

你是什​​么意思?为什么是服务器错误?客户是要求它的人,不是吗?如果您正在创建一个“真正的”REST接口,那么您使用超媒体作为应用程序状态的引擎 - 客户端永远不会想到/ server / thisPathHasNoHopeOfExisting /,因为您还没有告诉他们。

在Jersey / JAX-RS中,您可以使用UriBuilder构建URI - 您应该这样做。然后就没有'错误编码URI'。

您可以使用JAX-RS的precedence规则来创建某种全能页面,但我不确定它是否会非常有效。我的意思是,您如何区分您想要存在但可能不存在的资源(例如,不存在的帐户)和您不打算存在的资源?您的问题源于遗漏错误,因此您可能设想的任何解决方案也会继承此类可能的错误。使用UriBuilder。