-2

我有一个控制器,它接收请求,将数据传递给服务,服务进行外部 http 调用,将答案返回给服务,然后控制器返回一个网页。

错误消息或异常可能来自外部调用。

在返回网页之前,应该在进行外部调用的服务中还是在控制器中进行错误检查?

4

2 回答 2

1

很抱歉,这完全取决于你。您可以在 HTTP 调用方法中捕获错误,或者如果您更喜欢全局捕获,则可以在控制器级别捕获所有内容。

如果您使用的是 Spring,我会查看 ControllerAdvice 类并在那里针对不同类型的错误实现我的捕获: https ://spring.io/blog/2013/11/01/exception-handling-in-spring -mvc

@ControllerAdvice
class GlobalControllerExceptionHandler {
    @ResponseStatus(HttpStatus.CONFLICT)  // 409
    @ExceptionHandler(DataIntegrityViolationException.class)
    public void handleConflict() {
        // Nothing to do
    }
}
于 2019-02-09T14:43:27.517 回答
1

仅在您知道如何以特定、合理的方式继续的地方以及在应用程序顶层(如果您实现要由另一个应用程序使用的服务则不存在)的地方永远捕获异常。

当您收到来自外部调用的错误响应时,请确保将其视为异常,例如通过创建和抛出异常。

否则,只需确保您的调用者获得适当的失败信息:

  • 在一个 JVM 中,让异常冒泡。
  • 尽可能避免包装异常,这样您的调用者就有机会在不打开多层异常包装器的情况下轻松查看实际发生的情况,并且还可以避免大量非生产性代码。
  • 在 JVM 边界,将异常转换为适当的错误消息(例如 4xx 或 5xx HTTP 状态)。
  • 在向客户端发送错误响应之前,请记录错误。您客户的日志(如果它存在的话)不会包含有关问题的所有信息,而且很可能您无法使用。
于 2019-02-09T15:14:34.927 回答