Java 什么';在通过RESTful WS返回之前,将元数据附加到对象是一种合适的方式吗?

Java 什么';在通过RESTful WS返回之前,将元数据附加到对象是一种合适的方式吗?,java,web-services,rest,dto,Java,Web Services,Rest,Dto,我有一个RESTful web服务,它使用用户域对象的编组XML表示(使用JAXB)响应/user/{userId}。向客户反馈有关其请求的其他详细信息的适当方式是什么,特别是当请求没有返回客户期望的信息时?在非分布式Java应用程序中,可能有一个catch块处理数据访问或安全异常。如果/user/{userId}不返回任何内容(例如,web服务持久性机制不工作,存在安全限制等),如何在对客户端的响应中包含有意义的信息 我不认为DTO是我所需要的,因为我没有寻找域对象的不同表示形式。相反,我在寻

我有一个RESTful web服务,它使用用户域对象的编组XML表示(使用JAXB)响应/user/{userId}。向客户反馈有关其请求的其他详细信息的适当方式是什么,特别是当请求没有返回客户期望的信息时?在非分布式Java应用程序中,可能有一个catch块处理数据访问或安全异常。如果/user/{userId}不返回任何内容(例如,web服务持久性机制不工作,存在安全限制等),如何在对客户端的响应中包含有意义的信息


我不认为DTO是我所需要的,因为我没有寻找域对象的不同表示形式。相反,我在寻找有关请求过程中发生的情况的信息,这些信息可能会阻止它返回客户端所期望的信息。将域对象包含在某类包含相关元数据的ResponseObject中是否合适?这种方法的缺点是,我不希望我的服务层接口都将ResponseObject作为其返回类型,因为我很可能提供一个不具有相同元数据需求的非RESTful实现

如果真的是错误情况(安全问题、没有DB连接,甚至找不到提供ID的用户),则抛出异常。客户端接收到故障,并可以根据其中包含的信息进行操作


您使用哪种实现?例如,在ApacheCXF中,您可以自己定义异常处理程序并为异常呈现XML,您可以自由地在其中包含任何您喜欢的元信息。

如果确实是错误情况(安全问题、没有DB连接,甚至找不到提供ID的用户),那么只需抛出异常即可。客户端接收到故障,并可以根据其中包含的信息进行操作

您使用哪种实现?例如,在ApacheCXF中,您可以自己定义异常处理程序并为异常呈现XML,在这里您可以自由地包含任何您喜欢的元信息

向客户反馈有关其请求的其他详细信息的适当方式是什么,特别是当请求没有返回客户期望的信息时

如果/user/{userId}不返回任何内容(例如,web服务持久性机制不工作,存在安全限制等),如何在对客户端的响应中包含有意义的信息

这就是HTTP状态代码在RESTful服务中的用途

要指示请求的
用户标识
与实际用户不对应,可以返回
404未找到

要指示应用程序中的内部错误(例如无法连接到数据库),可以返回
500 internal Server error

您所描述的选项——将您的返回包装在
ResponseObject
中,然后包含真正的“响应状态”——听起来非常像SOAP

REST的美妙之处,或者至少是人们所说的,是您可以使用已经存在的HTTP响应状态代码来建模实际响应的几乎所有状态

向客户反馈有关其请求的其他详细信息的适当方式是什么,特别是当请求没有返回客户期望的信息时

如果/user/{userId}不返回任何内容(例如,web服务持久性机制不工作,存在安全限制等),如何在对客户端的响应中包含有意义的信息

这就是HTTP状态代码在RESTful服务中的用途

要指示请求的
用户标识
与实际用户不对应,可以返回
404未找到

要指示应用程序中的内部错误(例如无法连接到数据库),可以返回
500 internal Server error

您所描述的选项——将您的返回包装在
ResponseObject
中,然后包含真正的“响应状态”——听起来非常像SOAP


REST的美妙之处,或者至少是人们所说的,是您可以使用已经存在的HTTP响应状态代码来模拟实际响应的几乎所有状态。

我将使用异常捕获信息,然后将这些异常映射到具有适当状态代码的HTTP响应。如果使用JAX-RS,则可以通过创建
ExceptionMapper
的实现来实现这一点,如果使用Restlet,则可以创建
StatusService
子类


我将使用异常捕获信息,然后将这些异常映射到具有适当状态代码的HTTP响应。如果使用JAX-RS,则可以通过创建
ExceptionMapper
的实现来实现这一点,如果使用Restlet,则可以创建
StatusService
子类


+1表示“听起来很像肥皂”。不使用SOAP方式正是REST吸引人的地方,我不想让协议倒退。我个人是HTTP状态代码方法的支持者,但我只是想知道其他方法。如果您正在创建REST服务,那么为了让服务用户正确处理您的API,您应该在文档中提及可能的响应代码以及它们出现的时间/原因。例如,
检索用户调用GET/users/{userId}。可能的响应包括200个XML形式的用户负载,或者404个(如果找不到id),500个(如果存在不是客户机故障的内部服务器错误)等。除了记录可能的响应之外,其余的都不在您的掌握之中-您正在提供cli