我必须设计一个调用REST WS的DAO。 此WS必须从给定的用户名和密码返回用户凭据。
案例1:找到了用户=> REST WS发送http代码200和凭证响应。
案例2:未找到用户=> REST WS发送http代码400和带有原因的错误对象。
案例3:找到了用户,但他的帐户已被停用=> REST WS发送http代码400和错误对象以及原因。
案例4:REST WS不可用
我的DAO中映射REST WS响应的最佳方法是什么?
1 - 我在我的DAO中抛出funtionnal检查的异常以处理错误对象的情况,并且在正常情况下我返回凭证响应对象。当REST WS不可用时,我抛出一个未经检查的异常
2 - 我没有在我的DAO中抛出任何函数异常,因为它是服务层的工作。我返回REST WS返回的内容,例如包装对象中的凭据响应和错误响应,我让服务层检查这些对象以执行正确的工作。当REST WS不可用时,我抛出一个未经检查的异常
3 - 我只针对错误情况抛出未经检查的异常,我让服务层决定如何处理它。我只返回凭据回复。
非常感谢你。
答案 0 :(得分:1)
我更喜欢选项1,因为您的DAO负责了解远程数据源返回的内容。您的服务层位于您的DAO之上,不应该了解远程源的任何复杂性;这包括如何通过电线返回错误。
答案 1 :(得分:1)
HTTP协议中的4XX响应被定义为客户端错误,我认为有资格在DAO层中抛出异常。然后,错误对象只是抛出异常的表示。
如果您应该抛出已检查或未经检查的异常,则可能是长时间讨论的基础,最终取决于项目中的个人偏好或一般编码指南。抛出异常后,您可以将异常类型映射到相应的HTTP错误代码,例如BadCredentialsException变为HTTP错误400任何无法映射的内容都会成为500内部服务器错误