【问题标题】:If http client/server error is returned should we log or throw exception? - Java, SpringBoot如果返回 http 客户端/服务器错误,我们应该记录还是抛出异常? - Java、SpringBoot
【发布时间】:2021-08-20 07:39:52
【问题描述】:

我正在使用 Spring Boot 在 Java 中处理微服务架构。我对它很陌生,我想知道例如我是否无法得到我正在调用的服务的答案,如果返回 http 客户端/服务器错误,我们应该记录还是抛出异常?

【问题讨论】:

  • 因为我对 RestTemplate 比较熟悉。这就是我选择它的原因:) 关于我的代码和问题我应该怎么做的任何建议?

标签: java spring-boot error-handling


【解决方案1】:

你应该同时做:

  • 告诉您的客户发生了错误
  • 出于维护目的记录错误

解决第一点的方法是将错误处理集中在一个地方,您可以使用 @RestControllerAdvice 带注释的类。

【讨论】:

  • 我这里没有控制器,我应该在调用服务器的服务中显示一个错误。因此,如果没有提供数据或超时异常,客户端应该抛出错误。另外,我应该如何形成我的代码?我已经更新了我的问题。请看一下
  • 这不会阻止您添加控制器建议来处理所有异常。看看 ControllerAdvice 是如何工作的。您还可以通过添加一个包含错误代码、消息、日期等的类来添加处理异常的通用方法......并在发生异常时返回该类的实例(在控制器建议中)。因此,在您的 catch 块中,您可以抛出一个通用异常,该异常将被控制器建议捕获。
  • 是的,这是真的。所以你建议我创建一个类,例如用@RestControllerAdvice注释的ApplicationExceptionHandler,并创建一些自定义方法来调用它们生成不同的错误处理?
  • 是的,就是这样。您还应该尽可能地高档化您的异常及其处理。不尝试为每种情况创建一个异常类型,维护起来真的很乏味。
【解决方案2】:

我建议你两者都做。

如果下游 API 调用失败有回退响应?

:发送该响应并记录错误。

:记录错误并向客户端发送相应的响应以及响应代码和消息。

我建议有一个通用的 API 错误响应,它应该发送有效的响应代码以及 http 状态代码。

【讨论】:

  • 您好,谢谢您的回答。我现在意识到我应该两者都做。但是我应该如何从我的代码中做到这一点?我已经更新了我的问题。请看一下
  • @user9347049 可以参考stackoverflow.com/questions/42993428/…了解可选中的错误处理。
猜你喜欢
  • 1970-01-01
  • 2011-04-27
  • 2020-03-08
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2014-04-11
  • 2021-09-23
  • 1970-01-01
相关资源
最近更新 更多