[英]Modelling exceptions & Handling http codes inside a server application
我正在开发一个 spring 启动应用程序,它使 http 调用多个外部服务,聚合并将响应返回到前端。
这是我项目的当前结构:
RouteController -> Handler -> ServiceLayer
注意- 此应用程序将始终发送 Http 200 响应,除非所有服务调用都失败。
Spring异常处理我在这里寻找的是应用程序内部的异常处理。
我正在尝试在此服务中添加异常处理,并且似乎没有明确简洁的规则。
这是我为任何依赖失败创建的自定义异常 -
class DependencyException : RuntimeException {
constructor() : super()
constructor(message: String?) : super(message)
constructor(cause: Exception?) : super(cause)
constructor(message: String?, cause: Exception?) : super(message, cause)
}
这是调用 UserService 的服务层中的代码 -
fun getUsers(): List<User>? {
logger.info { "entered: getUsers " }
val response = userControllerApiClient.getUsers()
when (response.statusCode.is2xxSuccessful) {
true -> return response.body?.users
false -> throw DependencyException()
}
}
已使用org.springframework.http
库进行 http 调用。
有几个问题我找不到明确的答案——
您好,您的问题:
这取决于您的业务逻辑,例如您有一个服务层来更新用户,您应该通过 ID 找到它,如果找不到用户,您应该抛出异常
如果您使用 spring-boot 是一个框架,为您提供现成的库和 APIS 来处理所有您可以查看此链接https://www.baeldung.com/exception-handling-for-rest-with-spring
是的; 因为controller负责处理Http的异常,业务层的service
我没看懂这个问题
不需要,建议返回 Http 错误代码和自定义消息,以便客户端了解异常错误原因
我推荐遵循 jhiptser spring 引导项目结构, https://www.jhipster.tech/managing-server-errors/
服务何时应该编写自己的异常? 每当标准库中的现有异常不涵盖您的用例时,或者当您想在异常中添加更多详细信息时。
何时使用 kotlin/java 标准库现有异常? 同上,不要试图重新发明轮子。 比如,使用 IllegalArgumentException 而不是创建您自己的 InvalidRequestException。 看看这里 - https://programming.guide/java/list-of-java-exceptions.html
这里有一些资源我认为你应该看看 -
https://itnext.io/graceful-error-handling-in-rest-driven-web-applications-d4209b4937aa
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.