休息服务抛出异常:最好的处理方式

Posted

技术标签:

【中文标题】休息服务抛出异常:最好的处理方式【英文标题】:Rest service throws exception : Best way to handle 【发布时间】:2013-04-01 04:38:58 【问题描述】:

我有一个会引发异常的休息服务,我想知道处理这个问题的最佳方法是什么。

所以我有一个休息服务,它可以抛出一个用户定义的异常,我在 catch 块中捕获它并再次抛出那个异常!并使用休息框架来捕捉它。对于非用户定义的异常也是如此。我认为这会很好,因为我有许多休息服务,并且所有用户定义的异常代码处理都将在同一个地方。

我想知道这是在休息服务中处理异常的正确方法吗?

我正在使用运动衫。

//休息服务 @邮政 公共无效doSomething() 尝试 // ... 一些可以抛出用户定义异常和运行时异常的代码 捕捉(用户定义异常 e) 抛出新的 UserDefinedException(e); 捕捉(异常 e) 抛出新的 ServiceException(e); // 现在我有一个@Provider 来捕获这个抛出的异常 @Provider 公共类 UserDefinedExceptionHandler 实现 异常映射器 公共响应到响应(UserDefinedException 异常) 客户端响应客户端响应 = 新客户端响应(); ResponseStatus 状态 = 新的 ResponseStatus(); clientResponse = handleUserDefinedException(异常,状态,clientResponse); 返回 Response.ok(clientResponse).build(); // 同样对于 ServiceException

【问题讨论】:

可能重复***.com/questions/583973/… 【参考方案1】:

在 REST 服务中处理异常与在任何其他代码段中处理异常没有太大区别。

唯一的“约定”是如果异常是由客户端发送不正确的数据触发的,则返回 HTTP 400,而当您的服务意外失败时,则返回 500。

【讨论】:

是的,我知道,但我想知道我抛出异常并捕获它们的方式是否正确? 好的。所以你的问题是关于使用 Jersey Injection 提供程序来处理异常?检查this question then【参考方案2】:

只是在服务器上引发错误 500 并没有提供太多关于错误的详细信息,一种优雅地处理错误的方法是将响应数据包装在包含状态和数据的结构中,如果状态为错误,则显示正确消息。

类似这样的json格式:


    "status": "error",
    "data": 
        "message": "detailed error message"
    

【讨论】:

是的,我知道,但我想知道我抛出异常并捕获它们的方式是否正确? 我基本上两次抛出异常,一次在服务内部,一次在由rest框架处理的catch块内 正确是一个非常非常相对的概念 :) 取决于你的项目、团队、预算等等hhehehehe

以上是关于休息服务抛出异常:最好的处理方式的主要内容,如果未能解决你的问题,请参考以下文章

业务层错误和服务层处理——最好的方法?

JAVA如何抛出异常

异常处理方式

如何处理spring boot 2中@Requestbody中的对象抛出的异常

新手小白学JAVA 异常

如何使用 Web 服务正确抛出和处理异常